Annotation vocabulary setup (#4231) * Created vocab space * Directory to hold context testing tools * Add python vocab testing implementation * Copied sample files over for test input. * Expected results for correct annotation samples in N-Triples. * Annotation tests in Ruby. * HTML results of running Ruby annotation tests, as Markdown. * Entail graphs before linting, which fixes some false negatives. * Added a README and a local version of the vocab * Update some expected test expectations for Annotation triples. Update Annotation test results for Ruby. * Updated vocabulary to match CR version. * Update some gem dependencies and don't test RDFa version of manifest. 
diff --git a/annotation-vocab/01-validJSON-LD-manual.html b/annotation-vocab/01-validJSON-LD-manual.html new file mode 100644 index 0000000..88a4ccf --- /dev/null +++ b/annotation-vocab/01-validJSON-LD-manual.html 
@@ -0,0 +1,26 @@ +<!doctype html> +<html> +<head> +<title>Ensure Vocabulary JSON-LD is valid</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>Retrieve that context document and expand the following example using a JSON-LD validation tool. Does it expand?</p> + <pre> +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} +</pre> +</body> +</html> 
diff --git a/annotation-vocab/02-context-to-triples-manual.html b/annotation-vocab/02-context-to-triples-manual.html new file mode 100644 index 0000000..b9d6603 --- /dev/null +++ b/annotation-vocab/02-context-to-triples-manual.html 
@@ -0,0 +1,27 @@ +<!doctype html> +<html> +<head> +<title>JSON-LD context document can be used to convert JSON-LD serialized Annotations into RDF triples</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>Use that context document to convert the sample below into RDF triples. Did + the conversion complete?</p> + <pre> +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} +</pre> +</body> +</html> 
diff --git a/annotation-vocab/03-graphs-are-isomorphic-manual.html b/annotation-vocab/03-graphs-are-isomorphic-manual.html new file mode 100644 index 0000000..5061c32 --- /dev/null +++ b/annotation-vocab/03-graphs-are-isomorphic-manual.html 
@@ -0,0 +1,27 @@ +<!doctype html> +<html> +<head> +<title>Graphs produced are isomorphic</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>Use that context to convert the content below into various format RDF + graphs. Are these graphs identical?</p> + <pre> +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} +</pre> +</body> +</html> 
diff --git a/annotation-vocab/04-graphs-convert-lossless-manual.html b/annotation-vocab/04-graphs-convert-lossless-manual.html new file mode 100644 index 0000000..95ebfd6 --- /dev/null +++ b/annotation-vocab/04-graphs-convert-lossless-manual.html 
@@ -0,0 +1,27 @@ +<!doctype html> +<html> +<head> +<title>Graphs produced can be converted back into JSON-LD with no loss</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>Using that context, convert the content below into an RDF graph, then + convert that graph back into JSON-LD. Is the content the same?</p> + <pre> +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} +</pre> +</body> +</html> 
diff --git a/annotation-vocab/05-ontology-parsed-as-valid-manual.html b/annotation-vocab/05-ontology-parsed-as-valid-manual.html new file mode 100644 index 0000000..331eb23 --- /dev/null +++ b/annotation-vocab/05-ontology-parsed-as-valid-manual.html 
@@ -0,0 +1,14 @@ +<!doctype html> +<html> +<head> +<title>Ontology can be parsed without errors</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>One ontology of that context is at at http://www.w3.org/ns/oa.ttl</p> + <p>Parse that ontology into a graph. Did it work?</p> +</body> +</html> 
diff --git a/annotation-vocab/06-ontology-internally-consistent-manual.html b/annotation-vocab/06-ontology-internally-consistent-manual.html new file mode 100644 index 0000000..84aa433 --- /dev/null +++ b/annotation-vocab/06-ontology-internally-consistent-manual.html 
@@ -0,0 +1,15 @@ +<!doctype html> +<html> +<head> +<title>Ontology is internally consistent</title> +<link rel="stylesheet" href="/resources/testharness.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> + <p>The Annotation Vocabulary JSON-LD context is defined to be at http://www.w3.org/ns/oa</p> + <p>One ontology of that context is at http://www.w3.org/ns/oa.ttl</p> + <p>Parse that ontology and evaluate its domains and ranges. Are they + consistent with the underlying referenced data types?</p> +</body> +</html> 
diff --git a/annotation-vocab/OWNERS b/annotation-vocab/OWNERS new file mode 100644 index 0000000..187f28b --- /dev/null +++ b/annotation-vocab/OWNERS 
@@ -0,0 +1,2 @@ +@halindrome +@gkellogg 
diff --git a/annotation-vocab/tools/.gitignore b/annotation-vocab/tools/.gitignore new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/annotation-vocab/tools/.gitignore 
diff --git a/annotation-vocab/tools/README.md b/annotation-vocab/tools/README.md new file mode 100644 index 0000000..ae44a58 --- /dev/null +++ b/annotation-vocab/tools/README.md 
@@ -0,0 +1,21 @@ +Vocabulary Exercising Tools +=========================== + +The Web Annotation Vocabulary specification defines an ontology for +portable annotations. The tools in this directory, along with the +sample files supplied, can be used to exercise the vocabulary +"implementation" against various RDF processing engines. + +ruby-rdf +======== + +This directory contains a Ruby script that will evaluate the samples. See +the README.md file in that directory for more information. + +vocab-tester.py +=============== + +This python script exercises the vocabulary implementation using rdflib, +rdflib-jsonld and pyld. Note that this means your python environment must +have those additional python modules installed in order to run the tests. + 
diff --git a/annotation-vocab/tools/anno.jsonld b/annotation-vocab/tools/anno.jsonld new file mode 100644 index 0000000..5889291 --- /dev/null +++ b/annotation-vocab/tools/anno.jsonld 
@@ -0,0 +1,128 @@ +{ + "@context": { + "oa": "http://www.w3.org/ns/oa#", + "dc": "http://purl.org/dc/elements/1.1/", + "dcterms": "http://purl.org/dc/terms/", + "dctypes": "http://purl.org/dc/dcmitype/", + "foaf": "http://xmlns.com/foaf/0.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "iana": "http://www.iana.org/assignments/relation/", + "owl": "http://www.w3.org/2002/07/owl#", + "as": "http://www.w3.org/ns/activitystreams#", + "schema": "http://schema.org/", + + "id": {"@type": "@id", "@id": "@id"}, + "type": {"@type": "@id", "@id": "@type"}, + + "Annotation": "oa:Annotation", + "Dataset": "dctypes:Dataset", + "Image": "dctypes:StillImage", + "Video": "dctypes:MovingImage", + "Audio": "dctypes:Sound", + "Text": "dctypes:Text", + "TextualBody": "oa:TextualBody", + "ResourceSelection": "oa:ResourceSelection", + "SpecificResource": "oa:SpecificResource", + "FragmentSelector": "oa:FragmentSelector", + "CssSelector": "oa:CssSelector", + "XPathSelector": "oa:XPathSelector", + "TextQuoteSelector": "oa:TextQuoteSelector", + "TextPositionSelector": "oa:TextPositionSelector", + "DataPositionSelector": "oa:DataPositionSelector", + "SvgSelector": "oa:SvgSelector", + "RangeSelector": "oa:RangeSelector", + "TimeState": "oa:TimeState", + "HttpRequestState": "oa:HttpRequestState", + "CssStylesheet": "oa:CssStyle", + "Choice": "oa:Choice", + "Composite": "oa:Composite", + "List": "oa:List", + "Independents": "oa:Independents", + "Person": "foaf:Person", + "Software": "as:Application", + "Organization": "foaf:Organization", + "AnnotationCollection": "as:OrderedCollection", + "AnnotationPage": "as:OrderedCollectionPage", + "Audience": "schema:Audience", + + "Motivation": "oa:Motivation", + "bookmarking": "oa:bookmarking", + "classifying": "oa:classifying", + "commenting": "oa:commenting", + "describing": "oa:describing", + "editing": "oa:editing", + "highlighting": "oa:highlighting", + "identifying": "oa:identifying", + "linking": "oa:linking", + "moderating": "oa:moderating", + "questioning": "oa:questioning", + "replying": "oa:replying", + "reviewing": "oa:reviewing", + "tagging": "oa:tagging", + + "auto": "oa:autoDirection", + "ltr": "oa:ltrDirection", + "rtl": "oa:rtlDirection", + + "body": {"@type": "@id", "@id": "oa:hasBody"}, + "target": {"@type": "@id", "@id": "oa:hasTarget"}, + "source": {"@type": "@id", "@id": "oa:hasSource"}, + "selector": {"@type": "@id", "@id": "oa:hasSelector"}, + "state": {"@type": "@id", "@id": "oa:hasState"}, + "scope": {"@type": "@id", "@id": "oa:hasScope"}, + "refinedBy": {"@type": "@id", "@id": "oa:refinedBy"}, + "startSelector": {"@type": "@id", "@id": "oa:hasStartSelector"}, + "endSelector": {"@type": "@id", "@id": "oa:hasEndSelector"}, + "renderedVia": {"@type": "@id", "@id": "oa:renderedVia"}, + "creator": {"@type": "@id", "@id": "dcterms:creator"}, + "generator": {"@type": "@id", "@id": "as:generator"}, + "rights": {"@type": "@id", "@id": "dcterms:rights"}, + "homepage": {"@type": "@id", "@id": "foaf:homepage"}, + "via": {"@type": "@id", "@id": "oa:via"}, + "canonical": {"@type": "@id", "@id": "oa:canonical"}, + "stylesheet": {"@type": "@id", "@id": "oa:styledBy"}, + "cached": {"@type": "@id", "@id": "oa:cachedSource"}, + "conformsTo": {"@type": "@id", "@id": "dcterms:conformsTo"}, + "items": {"@type": "@id", "@id": "as:items", "@container": "@list"}, + "partOf": {"@type": "@id", "@id": "as:partOf"}, + "first": {"@type": "@id", "@id": "as:first"}, + "last": {"@type": "@id", "@id": "as:last"}, + "next": {"@type": "@id", "@id": "as:next"}, + "prev": {"@type": "@id", "@id": "as:prev"}, + "audience": {"@type": "@id", "@id": "schema:audience"}, + "motivation": {"@type": "@vocab", "@id": "oa:motivatedBy"}, + "purpose": {"@type": "@vocab", "@id": "oa:hasPurpose"}, + "textDirection": {"@type": "@vocab", "@id": "oa:textDirection"}, + + "accessibility": "schema:accessibilityFeature", + "bodyValue": "oa:bodyValue", + "format": "dc:format", + "language": "dc:language", + "processingLanguage": "oa:processingLanguage", + "value": "rdf:value", + "exact": "oa:exact", + "prefix": "oa:prefix", + "suffix": "oa:suffix", + "styleClass": "oa:styleClass", + "name": "foaf:name", + "email": "foaf:mbox", + "email_sha1": "foaf:mbox_sha1sum", + "nickname": "foaf:nick", + "label": "rdfs:label", + + "created": {"@id": "dcterms:created", "@type": "xsd:dateTime"}, + "modified": {"@id": "dcterms:modified", "@type": "xsd:dateTime"}, + "generated": {"@id": "dcterms:issued", "@type": "xsd:dateTime"}, + "sourceDate": {"@id": "oa:sourceDate", "@type": "xsd:dateTime"}, + "sourceDateStart": {"@id": "oa:sourceDateStart", "@type": "xsd:dateTime"}, + "sourceDateEnd": {"@id": "oa:sourceDateEnd", "@type": "xsd:dateTime"}, + + "start": {"@id": "oa:start", "@type": "xsd:nonNegativeInteger"}, + "end": {"@id": "oa:end", "@type": "xsd:nonNegativeInteger"}, + "total": {"@id": "as:totalItems", "@type": "xsd:nonNegativeInteger"}, + "startIndex": {"@id": "as:startIndex", "@type": "xsd:nonNegativeInteger"} + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/ruby-rdf/Gemfile b/annotation-vocab/tools/ruby-rdf/Gemfile new file mode 100644 index 0000000..3a38487 --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/Gemfile 
@@ -0,0 +1,12 @@ +source "https://rubygems.org" +ruby '2.3.1' + +gem 'rdf', github: "ruby-rdf/rdf", branch: 'develop' +gem 'rdf-rdfxml', github: "ruby-rdf/rdf-rdfxml", branch: 'develop' +gem 'linkeddata' + +gem 'jsonlint' +gem 'rspec' +gem 'rake' + +gem 'byebug' \ No newline at end of file 
diff --git a/annotation-vocab/tools/ruby-rdf/Gemfile.lock b/annotation-vocab/tools/ruby-rdf/Gemfile.lock new file mode 100644 index 0000000..03d5551 --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/Gemfile.lock 
@@ -0,0 +1,192 @@ +GIT + remote: git://github.com/ruby-rdf/rdf-rdfxml.git + revision: 8a12a78aa28f3a0f58926ae77844d3e7af52ea4c + branch: develop + specs: + rdf-rdfxml (2.0.0) + htmlentities (~> 4.3) + rdf (~> 2.0) + rdf-rdfa (~> 2.0) + rdf-xsd (~> 2.0) + +GIT + remote: git://github.com/ruby-rdf/rdf.git + revision: 4740b4a52bf358656d01d93adc5174d5fe07aec8 + branch: develop + specs: + rdf (2.1.0) + hamster (~> 3.0) + link_header (~> 0.0, >= 0.0.8) + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) + bcp47 (0.3.3) + i18n + builder (3.2.2) + byebug (9.0.6) + concurrent-ruby (1.0.2) + crack (0.4.3) + safe_yaml (~> 1.0.0) + diff-lcs (1.2.5) + ebnf (1.0.1) + rdf (~> 2.0) + sxp (~> 1.0) + equivalent-xml (0.6.0) + nokogiri (>= 1.4.3) + haml (4.0.7) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hashdiff (0.3.0) + htmlentities (4.3.4) + i18n (0.7.0) + json-ld (2.1.0) + multi_json (~> 1.11) + rdf (~> 2.1) + jsonlint (0.2.0) + oj (~> 2) + trollop (~> 2) + ld-patch (0.3.0) + ebnf (~> 1.0, >= 1.0.1) + rdf (~> 2.0) + rdf-xsd (~> 2.0) + sparql (~> 2.0) + sxp (~> 1.0) + link_header (0.0.8) + linkeddata (2.0.0) + equivalent-xml (~> 0.6) + json-ld (~> 2.0) + ld-patch (~> 0.3) + nokogiri (~> 1.6) + rdf (~> 2.0) + rdf-aggregate-repo (~> 2.0) + rdf-isomorphic (~> 2.0) + rdf-json (~> 2.0) + rdf-microdata (~> 2.0) + rdf-n3 (~> 2.0) + rdf-rdfa (~> 2.0) + rdf-rdfxml (~> 2.0) + rdf-reasoner (~> 0.4) + rdf-tabular (~> 0.4) + rdf-trig (~> 2.0) + rdf-trix (~> 2.0) + rdf-turtle (~> 2.0) + rdf-vocab (~> 2.0) + rdf-xsd (~> 2.0) + sparql (~> 2.0) + sparql-client (~> 2.0) + mini_portile2 (2.1.0) + multi_json (1.12.1) + net-http-persistent (2.9.4) + nokogiri (1.6.8.1) + mini_portile2 (~> 2.1.0) + oj (2.17.5) + public_suffix (2.0.4) + rake (11.3.0) + rdf-aggregate-repo (2.0.0) + rdf (~> 2.0) + rdf-isomorphic (2.0.0) + rdf (~> 2.0) + rdf-json (2.0.0) + rdf (~> 2.0) + rdf-microdata (2.0.3) + htmlentities (~> 4.3) + nokogiri (~> 1.6) + rdf (~> 2.0) + rdf-xsd (~> 2.0) + rdf-n3 (2.0.0) + rdf (~> 2.0) + rdf-rdfa (2.0.1) + haml (~> 4.0) + htmlentities (~> 4.3) + rdf (~> 2.0) + rdf-aggregate-repo (~> 2.0) + rdf-xsd (~> 2.0) + rdf-reasoner (0.4.0) + rdf (~> 2.0) + rdf-spec (~> 2.0) + rdf-vocab (~> 2.0) + rdf-xsd (~> 2.0) + rdf-spec (2.0.0) + rdf (~> 2.0) + rdf-isomorphic (~> 2.0) + rspec (~> 3.0) + rspec-its (~> 1.0) + webmock (~> 1.17) + rdf-tabular (0.4.0) + addressable (~> 2.3) + bcp47 (~> 0.3, >= 0.3.3) + json-ld (~> 2.0) + rdf (~> 2.0) + rdf-vocab (~> 2.0) + rdf-xsd (~> 2.0) + rdf-trig (2.0.0) + ebnf (~> 1.0, >= 1.0.1) + rdf (~> 2.0) + rdf-turtle (~> 2.0) + rdf-trix (2.0.0) + rdf (~> 2.0) + rdf-turtle (2.0.0) + ebnf (~> 1.0, >= 1.0.1) + rdf (~> 2.0) + rdf-vocab (2.1.0) + rdf (~> 2.1) + rdf-xsd (2.0.0) + rdf (~> 2.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-its (1.2.0) + rspec-core (>= 3.0.0) + rspec-expectations (>= 3.0.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + safe_yaml (1.0.4) + sparql (2.0.0) + builder (~> 3.2) + ebnf (~> 1.0, >= 1.0.1) + rdf (~> 2.0) + rdf-aggregate-repo (~> 2.0) + rdf-xsd (~> 2.0) + sparql-client (~> 2.0) + sxp (~> 1.0) + sparql-client (2.1.0) + net-http-persistent (~> 2.9) + rdf (~> 2.0) + sxp (1.0.0) + rdf (~> 2.0) + tilt (2.0.5) + trollop (2.1.2) + webmock (1.24.6) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff + +PLATFORMS + ruby + +DEPENDENCIES + byebug + jsonlint + linkeddata + rake + rdf! + rdf-rdfxml! + rspec + +RUBY VERSION + ruby 2.3.1p112 + +BUNDLED WITH + 1.12.5 
diff --git a/annotation-vocab/tools/ruby-rdf/README.md b/annotation-vocab/tools/ruby-rdf/README.md new file mode 100644 index 0000000..30f441e --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/README.md 
@@ -0,0 +1,5 @@ +## Annotation Vocabulary test in Ruby + +Setup by installing Ruby 2.3.1, and running `bundle install`. Then, to run tests: `bundle exec rake`. + +To get formatted output, run `bundle exec rspec annotation-vocab_spec.rb -f h -o RESULTS.md` 
diff --git a/annotation-vocab/tools/ruby-rdf/RESULTS.md b/annotation-vocab/tools/ruby-rdf/RESULTS.md new file mode 100644 index 0000000..c793204 --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/RESULTS.md 
@@ -0,0 +1,2709 @@ +<!DOCTYPE html> +<html lang='en'> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> + <script type="text/javascript"> + // <![CDATA[ + +function addClass(element_id, classname) { + document.getElementById(element_id).className += (" " + classname); +} + +function removeClass(element_id, classname) { + var elem = document.getElementById(element_id); + var classlist = elem.className.replace(classname,''); + elem.className = classlist; +} + +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} + +function makeRed(element_id) { + removeClass(element_id, 'passed'); + removeClass(element_id, 'not_implemented'); + addClass(element_id,'failed'); +} + +function makeYellow(element_id) { + var elem = document.getElementById(element_id); + if (elem.className.indexOf("failed") == -1) { // class doesn't includes failed + if (elem.className.indexOf("not_implemented") == -1) { // class doesn't include not_implemented + removeClass(element_id, 'passed'); + addClass(element_id,'not_implemented'); + } + } +} + +function apply_filters() { + var passed_filter = document.getElementById('passed_checkbox').checked; + var failed_filter = document.getElementById('failed_checkbox').checked; + var pending_filter = document.getElementById('pending_checkbox').checked; + + assign_display_style("example passed", passed_filter); + assign_display_style("example failed", failed_filter); + assign_display_style("example not_implemented", pending_filter); + + assign_display_style_for_group("example_group passed", passed_filter); + assign_display_style_for_group("example_group not_implemented", pending_filter, pending_filter || passed_filter); + assign_display_style_for_group("example_group failed", failed_filter, failed_filter || pending_filter || passed_filter); +} + +function get_display_style(display_flag) { + var style_mode = 'none'; + if (display_flag == true) { + style_mode = 'block'; + } + return style_mode; +} + +function assign_display_style(classname, display_flag) { + var style_mode = get_display_style(display_flag); + var elems = document.getElementsByClassName(classname) + for (var i=0; i<elems.length;i++) { + elems[i].style.display = style_mode; + } +} + +function assign_display_style_for_group(classname, display_flag, subgroup_flag) { + var display_style_mode = get_display_style(display_flag); + var subgroup_style_mode = get_display_style(subgroup_flag); + var elems = document.getElementsByClassName(classname) + for (var i=0; i<elems.length;i++) { + var style_mode = display_style_mode; + if ((display_flag != subgroup_flag) && (elems[i].getElementsByTagName('dt')[0].innerHTML.indexOf(", ") != -1)) { + elems[i].style.display = subgroup_style_mode; + } else { + elems[i].style.display = display_style_mode; + } + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; height: 4em; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; + position: absolute; +} + +#label { + float:left; +} + +#display-filters { + float:left; + padding: 28px 0 0 40%; + font-family: "Lucida Grande", Helvetica, sans-serif; +} + +#summary { + float:right; + padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd .duration { + padding-left: 5px; + text-align: right; + right: 0px; + float:right; +} + +dd.example.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.example.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.example.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +dd.example.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + + +dt.not_implemented { + color: #000000; background: #FAF834; +} + +dt.pending_fixed { + color: #FFFFFF; background: #C40D0D; +} + +dt.failed { + color: #FFFFFF; background: #C40D0D; +} + + +#rspec-header.not_implemented { + color: #000000; background: #FAF834; +} + +#rspec-header.pending_fixed { + color: #FFFFFF; background: #C40D0D; +} + +#rspec-header.failed { + color: #FFFFFF; background: #C40D0D; +} + + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> +</head> +<body> +<div class="rspec-report"> + +<div id="rspec-header"> + <div id="label"> + <h1>RSpec Code Examples</h1> + </div> + + <div id="display-filters"> + <input id="passed_checkbox" name="passed_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="1" /> <label for="passed_checkbox">Passed</label> + <input id="failed_checkbox" name="failed_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="2" /> <label for="failed_checkbox">Failed</label> + <input id="pending_checkbox" name="pending_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="3" /> <label for="pending_checkbox">Pending</label> + </div> + + <div id="summary"> + <p id="totals">&#160;</p> + <p id="duration">&#160;</p> + </div> +</div> + + +<div class="results"> +<div id="div_group_1" class="example_group passed"> + <dl style="margin-left: 0px;"> + <dt id="example_group_1" class="passed">Web Annotation Vocab</dt> + <script type="text/javascript">moveProgressBar('0.3');</script> + <dd class="example passed"><span class="passed_spec_name">The JSON-LD context document can be parsed without errors by JSON-LD validators</span><span class='duration'>0.30309s</span></dd> + </dl> +</div> +<div id="div_group_2" class="example_group passed"> + <dl style="margin-left: 15px;"> + <dt id="example_group_2" class="passed">The JSON-LD context document can be used to convert JSON-LD serialized Annotations into RDF triples</dt> + <script type="text/javascript">moveProgressBar('0.6');</script> + <dd class="example passed"><span class="passed_spec_name">anno1.json</span><span class='duration'>0.56069s</span></dd> + <script type="text/javascript">moveProgressBar('0.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno1.json</span><span class='duration'>0.42548s</span></dd> + <script type="text/javascript">moveProgressBar('1.3');</script> + <dd class="example passed"><span class="passed_spec_name">anno10.json</span><span class='duration'>0.39919s</span></dd> + <script type="text/javascript">moveProgressBar('1.6');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno10.json</span><span class='duration'>0.48348s</span></dd> + <script type="text/javascript">moveProgressBar('1.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno11.json</span><span class='duration'>0.41240s</span></dd> + <script type="text/javascript">moveProgressBar('2.3');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno11.json</span><span class='duration'>0.53605s</span></dd> + <script type="text/javascript">moveProgressBar('2.6');</script> + <dd class="example passed"><span class="passed_spec_name">anno12.json</span><span class='duration'>0.40508s</span></dd> + <script type="text/javascript">moveProgressBar('2.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno12.json</span><span class='duration'>0.49430s</span></dd> + <script type="text/javascript">moveProgressBar('3.3');</script> + <dd class="example passed"><span class="passed_spec_name">anno13.json</span><span class='duration'>0.40935s</span></dd> + <script type="text/javascript">moveProgressBar('3.6');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno13.json</span><span class='duration'>0.48180s</span></dd> + <script type="text/javascript">moveProgressBar('3.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno14.json</span><span class='duration'>0.41280s</span></dd> + <script type="text/javascript">moveProgressBar('4.3');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno14.json</span><span class='duration'>0.47087s</span></dd> + <script type="text/javascript">moveProgressBar('4.6');</script> + <dd class="example passed"><span class="passed_spec_name">anno15.json</span><span class='duration'>0.40029s</span></dd> + <script type="text/javascript">moveProgressBar('4.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno15.json</span><span class='duration'>0.51705s</span></dd> + <script type="text/javascript">moveProgressBar('5.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno16.json</span><span class='duration'>0.39632s</span></dd> + <script type="text/javascript">moveProgressBar('5.6');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno16.json</span><span class='duration'>0.46520s</span></dd> + <script type="text/javascript">moveProgressBar('5.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno17.json</span><span class='duration'>0.39630s</span></dd> + <script type="text/javascript">moveProgressBar('6.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno17.json</span><span class='duration'>0.43479s</span></dd> + <script type="text/javascript">moveProgressBar('6.6');</script> + <dd class="example passed"><span class="passed_spec_name">anno18.json</span><span class='duration'>0.40481s</span></dd> + <script type="text/javascript">moveProgressBar('6.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno18.json</span><span class='duration'>0.46648s</span></dd> + <script type="text/javascript">moveProgressBar('7.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno19.json</span><span class='duration'>0.39744s</span></dd> + <script type="text/javascript">moveProgressBar('7.6');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno19.json</span><span class='duration'>0.43402s</span></dd> + <script type="text/javascript">moveProgressBar('7.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno2.json</span><span class='duration'>0.40744s</span></dd> + <script type="text/javascript">moveProgressBar('8.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno2.json</span><span class='duration'>0.44628s</span></dd> + <script type="text/javascript">moveProgressBar('8.6');</script> + <dd class="example passed"><span class="passed_spec_name">anno20.json</span><span class='duration'>0.41189s</span></dd> + <script type="text/javascript">moveProgressBar('8.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno20.json</span><span class='duration'>0.43640s</span></dd> + <script type="text/javascript">moveProgressBar('9.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno21.json</span><span class='duration'>0.39995s</span></dd> + <script type="text/javascript">moveProgressBar('9.6');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno21.json</span><span class='duration'>0.46148s</span></dd> + <script type="text/javascript">moveProgressBar('9.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno22.json</span><span class='duration'>0.40286s</span></dd> + <script type="text/javascript">moveProgressBar('10.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno22.json</span><span class='duration'>0.44256s</span></dd> + <script type="text/javascript">moveProgressBar('10.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno23.json</span><span class='duration'>0.41701s</span></dd> + <script type="text/javascript">moveProgressBar('10.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno23.json</span><span class='duration'>0.47746s</span></dd> + <script type="text/javascript">moveProgressBar('11.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno24.json</span><span class='duration'>0.41397s</span></dd> + <script type="text/javascript">moveProgressBar('11.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno24.json</span><span class='duration'>0.44446s</span></dd> + <script type="text/javascript">moveProgressBar('11.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno25.json</span><span class='duration'>0.39897s</span></dd> + <script type="text/javascript">moveProgressBar('12.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno25.json</span><span class='duration'>0.44369s</span></dd> + <script type="text/javascript">moveProgressBar('12.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno26.json</span><span class='duration'>0.40163s</span></dd> + <script type="text/javascript">moveProgressBar('12.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno26.json</span><span class='duration'>0.44521s</span></dd> + <script type="text/javascript">moveProgressBar('13.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno27.json</span><span class='duration'>0.40337s</span></dd> + <script type="text/javascript">moveProgressBar('13.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno27.json</span><span class='duration'>0.46172s</span></dd> + <script type="text/javascript">moveProgressBar('13.9');</script> + <dd class="example passed"><span class="passed_spec_name">anno28.json</span><span class='duration'>0.40573s</span></dd> + <script type="text/javascript">moveProgressBar('14.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno28.json</span><span class='duration'>0.44746s</span></dd> + <script type="text/javascript">moveProgressBar('14.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno29.json</span><span class='duration'>0.40069s</span></dd> + <script type="text/javascript">moveProgressBar('14.9');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno29.json</span><span class='duration'>0.44089s</span></dd> + <script type="text/javascript">moveProgressBar('15.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno3.json</span><span class='duration'>0.39832s</span></dd> + <script type="text/javascript">moveProgressBar('15.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno3.json</span><span class='duration'>0.44832s</span></dd> + <script type="text/javascript">moveProgressBar('15.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno30.json</span><span class='duration'>0.40439s</span></dd> + <script type="text/javascript">moveProgressBar('16.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno30.json</span><span class='duration'>0.47012s</span></dd> + <script type="text/javascript">moveProgressBar('16.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno31.json</span><span class='duration'>0.40352s</span></dd> + <script type="text/javascript">moveProgressBar('16.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno31.json</span><span class='duration'>0.48881s</span></dd> + <script type="text/javascript">moveProgressBar('17.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno32.json</span><span class='duration'>0.40521s</span></dd> + <script type="text/javascript">moveProgressBar('17.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno32.json</span><span class='duration'>0.47565s</span></dd> + <script type="text/javascript">moveProgressBar('17.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno33.json</span><span class='duration'>0.39758s</span></dd> + <script type="text/javascript">moveProgressBar('18.2');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno33.json</span><span class='duration'>0.42825s</span></dd> + <script type="text/javascript">moveProgressBar('18.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno34.json</span><span class='duration'>0.40342s</span></dd> + <script type="text/javascript">moveProgressBar('18.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno34.json</span><span class='duration'>0.46386s</span></dd> + <script type="text/javascript">moveProgressBar('19.2');</script> + <dd class="example passed"><span class="passed_spec_name">anno35.json</span><span class='duration'>0.39727s</span></dd> + <script type="text/javascript">moveProgressBar('19.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno35.json</span><span class='duration'>0.44666s</span></dd> + <script type="text/javascript">moveProgressBar('19.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno36.json</span><span class='duration'>0.40368s</span></dd> + <script type="text/javascript">moveProgressBar('20.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno36.json</span><span class='duration'>0.50162s</span></dd> + <script type="text/javascript">moveProgressBar('20.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno37.json</span><span class='duration'>0.40413s</span></dd> + <script type="text/javascript">moveProgressBar('20.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno37.json</span><span class='duration'>0.44505s</span></dd> + <script type="text/javascript">moveProgressBar('21.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno38.json</span><span class='duration'>0.40365s</span></dd> + <script type="text/javascript">moveProgressBar('21.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno38.json</span><span class='duration'>0.44806s</span></dd> + <script type="text/javascript">moveProgressBar('21.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno39.json</span><span class='duration'>0.39650s</span></dd> + <script type="text/javascript">moveProgressBar('22.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno39.json</span><span class='duration'>0.45765s</span></dd> + <script type="text/javascript">moveProgressBar('22.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno4.json</span><span class='duration'>0.40110s</span></dd> + <script type="text/javascript">moveProgressBar('22.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno4.json</span><span class='duration'>0.43765s</span></dd> + <script type="text/javascript">moveProgressBar('23.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno40.json</span><span class='duration'>0.39694s</span></dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno40.json</span><span class='duration'>0.42795s</span></dd> + <script type="text/javascript">moveProgressBar('23.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno41-example44.json</span><span class='duration'>0.42444s</span></dd> + <script type="text/javascript">moveProgressBar('24.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno41-example44.json</span><span class='duration'>0.82530s</span></dd> + <script type="text/javascript">moveProgressBar('24.5');</script> + <dd class="example passed"><span class="passed_spec_name">anno5.json</span><span class='duration'>0.40352s</span></dd> + <script type="text/javascript">moveProgressBar('24.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno5.json</span><span class='duration'>0.43810s</span></dd> + <script type="text/javascript">moveProgressBar('25.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno6.json</span><span class='duration'>0.40099s</span></dd> + <script type="text/javascript">moveProgressBar('25.4');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno6.json</span><span class='duration'>0.41499s</span></dd> + <script type="text/javascript">moveProgressBar('25.8');</script> + <dd class="example passed"><span class="passed_spec_name">anno7.json</span><span class='duration'>0.39763s</span></dd> + <script type="text/javascript">moveProgressBar('26.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno7.json</span><span class='duration'>0.45328s</span></dd> + <script type="text/javascript">moveProgressBar('26.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno8.json</span><span class='duration'>0.40016s</span></dd> + <script type="text/javascript">moveProgressBar('26.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno8.json</span><span class='duration'>0.42356s</span></dd> + <script type="text/javascript">moveProgressBar('27.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno9.json</span><span class='duration'>0.40070s</span></dd> + <script type="text/javascript">moveProgressBar('27.4');</script> + <dd class="example passed"><span class="passed_spec_name">lint anno9.json</span><span class='duration'>0.43877s</span></dd> + <script type="text/javascript">moveProgressBar('27.8');</script> + <dd class="example passed"><span class="passed_spec_name">collection1.json</span><span class='duration'>0.75470s</span></dd> + <script type="text/javascript">moveProgressBar('28.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint collection1.json</span><span class='duration'>3.15045s</span></dd> + <script type="text/javascript">moveProgressBar('28.4');</script> + <dd class="example passed"><span class="passed_spec_name">example41.json</span><span class='duration'>0.39996s</span></dd> + <script type="text/javascript">moveProgressBar('28.8');</script> + <dd class="example passed"><span class="passed_spec_name">lint example41.json</span><span class='duration'>0.43951s</span></dd> + <script type="text/javascript">moveProgressBar('29.1');</script> + <dd class="example passed"><span class="passed_spec_name">example42.json</span><span class='duration'>0.40507s</span></dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="example passed"><span class="passed_spec_name">lint example42.json</span><span class='duration'>0.47543s</span></dd> + <script type="text/javascript">moveProgressBar('29.8');</script> + <dd class="example passed"><span class="passed_spec_name">example43.json</span><span class='duration'>0.40551s</span></dd> + <script type="text/javascript">moveProgressBar('30.1');</script> + <dd class="example passed"><span class="passed_spec_name">lint example43.json</span><span class='duration'>0.50432s</span></dd> + </dl> +</div> +<div id="div_group_3" class="example_group passed"> + <dl style="margin-left: 15px;"> + <dt id="example_group_3" class="passed">detects errors in incorrect examples</dt> + <script type="text/javascript">moveProgressBar('30.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno1.json</span><span class='duration'>0.00142s</span></dd> + <script type="text/javascript">moveProgressBar('30.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno10.json</span><span class='duration'>0.00076s</span></dd> + <script type="text/javascript">moveProgressBar('31.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno11.json</span><span class='duration'>0.19856s</span></dd> + <script type="text/javascript">moveProgressBar('31.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno12.json</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('31.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno13.json</span><span class='duration'>0.00075s</span></dd> + <script type="text/javascript">moveProgressBar('32.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno14.json</span><span class='duration'>0.00077s</span></dd> + <script type="text/javascript">moveProgressBar('32.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno15.json</span><span class='duration'>0.00116s</span></dd> + <script type="text/javascript">moveProgressBar('32.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno16.json</span><span class='duration'>0.00074s</span></dd> + <script type="text/javascript">moveProgressBar('33.1');</script> + <dd class="example passed"><span class="passed_spec_name">anno17.json</span><span class='duration'>0.00075s</span></dd> + <script type="text/javascript">moveProgressBar('33.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno18.json</span><span class='duration'>0.00077s</span></dd> + <script type="text/javascript">moveProgressBar('33.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno19.json</span><span class='duration'>0.00071s</span></dd> + <script type="text/javascript">makeYellow('rspec-header');</script> + <script type="text/javascript">makeYellow('div_group_3');</script> + <script type="text/javascript">makeYellow('example_group_3');</script> + <script type="text/javascript">moveProgressBar('34.1');</script> + <dd class="example not_implemented"><span class="not_implemented_spec_name">anno2.json (PENDING: Empty Documents are invalid)</span></dd> + <script type="text/javascript">moveProgressBar('34.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno20.json</span><span class='duration'>0.00112s</span></dd> + <script type="text/javascript">moveProgressBar('34.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno21.json</span><span class='duration'>0.00119s</span></dd> + <script type="text/javascript">moveProgressBar('35.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno22.json</span><span class='duration'>0.00106s</span></dd> + <script type="text/javascript">moveProgressBar('35.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno23.json</span><span class='duration'>0.00075s</span></dd> + <script type="text/javascript">moveProgressBar('35.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno24.json</span><span class='duration'>0.00076s</span></dd> + <script type="text/javascript">moveProgressBar('36.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno25.json</span><span class='duration'>0.00066s</span></dd> + <script type="text/javascript">moveProgressBar('36.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno26.json</span><span class='duration'>0.19880s</span></dd> + <script type="text/javascript">moveProgressBar('36.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno27.json</span><span class='duration'>0.20570s</span></dd> + <script type="text/javascript">moveProgressBar('37.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno28.json</span><span class='duration'>0.19991s</span></dd> + <script type="text/javascript">moveProgressBar('37.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno29.json</span><span class='duration'>0.19764s</span></dd> + <script type="text/javascript">makeYellow('rspec-header');</script> + <script type="text/javascript">makeYellow('div_group_3');</script> + <script type="text/javascript">makeYellow('example_group_3');</script> + <script type="text/javascript">moveProgressBar('37.7');</script> + <dd class="example not_implemented"><span class="not_implemented_spec_name">anno3.json (PENDING: Empty Documents are invalid)</span></dd> + <script type="text/javascript">moveProgressBar('38.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno30.json</span><span class='duration'>0.19944s</span></dd> + <script type="text/javascript">moveProgressBar('38.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno31.json</span><span class='duration'>0.20036s</span></dd> + <script type="text/javascript">moveProgressBar('38.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno32.json</span><span class='duration'>0.19468s</span></dd> + <script type="text/javascript">moveProgressBar('39.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno33.json</span><span class='duration'>0.20145s</span></dd> + <script type="text/javascript">moveProgressBar('39.4');</script> + <dd class="example passed"><span class="passed_spec_name">anno34.json</span><span class='duration'>0.19786s</span></dd> + <script type="text/javascript">moveProgressBar('39.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno35.json</span><span class='duration'>0.19442s</span></dd> + <script type="text/javascript">moveProgressBar('40.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno36.json</span><span class='duration'>0.20170s</span></dd> + <script type="text/javascript">moveProgressBar('40.3');</script> + <dd class="example passed"><span class="passed_spec_name">anno37.json</span><span class='duration'>0.00073s</span></dd> + <script type="text/javascript">moveProgressBar('40.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno38.json</span><span class='duration'>0.19785s</span></dd> + <script type="text/javascript">moveProgressBar('41.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno39.json</span><span class='duration'>0.20030s</span></dd> + <script type="text/javascript">moveProgressBar('41.3');</script> + <dd class="example passed"><span class="passed_spec_name">anno4.json</span><span class='duration'>0.00247s</span></dd> + <script type="text/javascript">moveProgressBar('41.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno5.json</span><span class='duration'>0.11420s</span></dd> + <script type="text/javascript">moveProgressBar('42.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno6.json</span><span class='duration'>0.19756s</span></dd> + <script type="text/javascript">moveProgressBar('42.3');</script> + <dd class="example passed"><span class="passed_spec_name">anno7.json</span><span class='duration'>0.19826s</span></dd> + <script type="text/javascript">moveProgressBar('42.7');</script> + <dd class="example passed"><span class="passed_spec_name">anno8.json</span><span class='duration'>0.19797s</span></dd> + <script type="text/javascript">moveProgressBar('43.0');</script> + <dd class="example passed"><span class="passed_spec_name">anno9.json</span><span class='duration'>0.19496s</span></dd> + </dl> +</div> +<div id="div_group_4" class="example_group passed"> + <dl style="margin-left: 15px;"> + <dt id="example_group_4" class="passed">The ontology documents can be parsed without errors by RDF Schema validators</dt> + <script type="text/javascript">moveProgressBar('43.3');</script> + <dd class="example passed"><span class="passed_spec_name">JSON-LD version is isomorphic to jsonld</span><span class='duration'>0.33990s</span></dd> + <script type="text/javascript">moveProgressBar('43.7');</script> + <dd class="example passed"><span class="passed_spec_name">JSON-LD version is isomorphic to rdfa</span><span class='duration'>0.24762s</span></dd> + <script type="text/javascript">moveProgressBar('44.0');</script> + <dd class="example passed"><span class="passed_spec_name">JSON-LD version is isomorphic to rdfxml</span><span class='duration'>0.38899s</span></dd> + <script type="text/javascript">moveProgressBar('44.3');</script> + <dd class="example passed"><span class="passed_spec_name">JSON-LD version is isomorphic to ttl</span><span class='duration'>0.47473s</span></dd> + </dl> +</div> +<div id="div_group_5" class="example_group passed"> + <dl style="margin-left: 15px;"> + <dt id="example_group_5" class="passed">The ontology documents are isomorphic to each other</dt> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('div_group_5');</script> + <script type="text/javascript">makeRed('example_group_5');</script> + <script type="text/javascript">moveProgressBar('44.7');</script> + <dd class="example failed"> + <span class="failed_spec_name">rdfa</span> + <span class="duration">0.44157s</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Failure/Error: expect(fg).to be_equivalent_graph(vocab_graph) + + Graph entry counts differ: + expected: 385 + actual: 24 + + #&lt;struct RDF::Spec::Matchers::Info id=nil, logger=nil, action=nil, result=nil&gt; + Expected: + @prefix dc: &lt;http://purl.org/dc/terms/&gt; . + @prefix dc11: &lt;http://purl.org/dc/elements/1.1/&gt; . + @prefix oa: &lt;http://www.w3.org/ns/oa#&gt; . + @prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; . + @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; . + @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; . + @prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; . + @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . + + oa:Annotation a rdfs:Class; + rdfs:label &quot;Annotation&quot;; + rdfs:comment &quot;The class for Web Annotations.&quot;; + rdfs:isDefinedBy oa: . + + oa:Choice a rdfs:Class; + rdfs:label &quot;Choice&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should select one of the resources in the as:items list to use, rather than all of them. This is typically used to provide a choice of resources to render to the user, based on further supplied properties. If the consuming application cannot determine the user&#39;s preference, then it should use the first in the list.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Composite a rdfs:Class; + rdfs:label &quot;Composite&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use all of the resources in the as:items list, but that order is not important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:CssSelector a rdfs:Class; + rdfs:label &quot;CssSelector&quot;; + rdfs:comment &quot;A CssSelector describes a Segment of interest in a representation that conforms to the Document Object Model through the use of the CSS selector specification.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:CssStyle a rdfs:Class; + rdfs:label &quot;CssStyle&quot;; + rdfs:comment &quot;A resource which describes styles for resources participating in the Annotation using CSS.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Style . + + oa:DataPositionSelector a rdfs:Class; + rdfs:label &quot;DataPositionSelector&quot;; + rdfs:comment &quot;DataPositionSelector describes a range of data by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first byte, position 1 would be immediately before the second byte, and so on. The start byte is thus included in the list, but the end byte is not.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:Direction a rdfs:Class; + rdfs:label &quot;Direction&quot;; + rdfs:comment &quot;A class to encapsulate the different text directions that a textual resource might take. It is not used directly in the Annotation Model, only its three instances.&quot;; + rdfs:isDefinedBy oa: . + + oa:FragmentSelector a rdfs:Class; + rdfs:label &quot;FragmentSelector&quot;; + rdfs:comment &quot;The FragmentSelector class is used to record the segment of a representation using the IRI fragment specification defined by the representation&#39;s media type.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:HttpRequestState a rdfs:Class; + rdfs:label &quot;HttpRequestState&quot;; + rdfs:comment &quot;The HttpRequestState class is used to record the HTTP request headers that a client SHOULD use to request the correct representation from the resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:Independents a rdfs:Class; + rdfs:label &quot;Independents&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that each of the resources in the as:items list are independently associated with all of the other bodies or targets. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:List a rdfs:Class; + rdfs:label &quot;List&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use each of the resources in the as:items list, and that their order is important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Motivation a rdfs:Class; + rdfs:label &quot;Motivation&quot;; + rdfs:comment &quot;The Motivation class is used to record the user&#39;s intent or motivation for the creation of the Annotation, or the inclusion of the body or target, that it is associated with.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf skos:Concept . + + oa:RangeSelector a rdfs:Class; + rdfs:label &quot;RangeSelector&quot;; + rdfs:comment &quot;A Range Selector can be used to identify the beginning and the end of the selection by using other Selectors. The selection consists of everything from the beginning of the starting selector through to the beginning of the ending selector, but not including it.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:ResourceSelection a rdfs:Class; + rdfs:label &quot;ResourceSelection&quot;; + rdfs:comment &quot;Instances of the ResourceSelection class identify part (described by an oa:Selector) of another resource (referenced with oa:hasSource), possibly from a particular representation of a resource (described by an oa:State). Please note that ResourceSelection is not used directly in the Web Annotation model, but is provided as a separate class for further application profiles to use, separate from oa:SpecificResource which has many Annotation specific features.&quot;; + rdfs:isDefinedBy oa: . + + oa:Selector a rdfs:Class; + rdfs:label &quot;Selector&quot;; + rdfs:comment &quot;A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. This class is not used directly in the Annotation model, only its subclasses.&quot;; + rdfs:isDefinedBy oa: . + + oa:SpecificResource a rdfs:Class; + rdfs:label &quot;SpecificResource&quot;; + rdfs:comment &quot;Instances of the SpecificResource class identify part of another resource (referenced with oa:hasSource), a particular representation of a resource, a resource with styling hints for renders, or any combination of these, as used within an Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:ResourceSelection . + + oa:State a rdfs:Class; + rdfs:label &quot;State&quot;; + rdfs:comment &quot;A State describes the intended state of a resource as applied to the particular Annotation, and thus provides the information needed to retrieve the correct representation of that resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:Style a rdfs:Class; + rdfs:label &quot;Style&quot;; + rdfs:comment &quot;A Style describes the intended styling of a resource as applied to the particular Annotation, and thus provides the information to ensure that rendering is consistent across implementations.&quot;; + rdfs:isDefinedBy oa: . + + oa:SvgSelector a rdfs:Class; + rdfs:label &quot;SvgSelector&quot;; + rdfs:comment &quot;An SvgSelector defines an area through the use of the Scalable Vector Graphics [SVG] standard. This allows the user to select a non-rectangular area of the content, such as a circle or polygon by describing the region using SVG. The SVG may be either embedded within the Annotation or referenced as an External Resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextPositionSelector a rdfs:Class; + rdfs:label &quot;TextPositionSelector&quot;; + rdfs:comment &quot;The TextPositionSelector describes a range of text by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first character, position 1 would be immediately before the second character, and so on.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextQuoteSelector a rdfs:Class; + rdfs:label &quot;TextQuoteSelector&quot;; + rdfs:comment &quot;The TextQuoteSelector describes a range of text by copying it, and including some of the text immediately before (a prefix) and after (a suffix) it to distinguish between multiple copies of the same sequence of characters.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextualBody a rdfs:Class; + rdfs:label &quot;TextualBody&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:TimeState a rdfs:Class; + rdfs:label &quot;TimeState&quot;; + rdfs:comment &quot;A TimeState records the time at which the resource&#39;s state is appropriate for the Annotation, typically the time that the Annotation was created and/or a link to a persistent copy of the current version.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:XPathSelector a rdfs:Class; + rdfs:label &quot;XPathSelector&quot;; + rdfs:comment &quot;An XPathSelector is used to select elements and content within a resource that supports the Document Object Model via a specified XPath value.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:as:Application a rdfs:Class; + rdfs:label &quot;as:Application&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollection a rdfs:Class; + rdfs:label &quot;as:OrderedCollection&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollectionPage a rdfs:Class; + rdfs:label &quot;as:OrderedCollectionPage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Dataset a rdfs:Class; + rdfs:label &quot;dctypes:Dataset&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:MovingImage a rdfs:Class; + rdfs:label &quot;dctypes:MovingImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Sound a rdfs:Class; + rdfs:label &quot;dctypes:Sound&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:StillImage a rdfs:Class; + rdfs:label &quot;dctypes:StillImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Text a rdfs:Class; + rdfs:label &quot;dctypes:Text&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Organization a rdfs:Class; + rdfs:label &quot;foaf:Organization&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Person a rdfs:Class; + rdfs:label &quot;foaf:Person&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:schema:Audience a rdfs:Class; + rdfs:label &quot;schema:Audience&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedDescriptions a rdfs:Resource; + rdfs:label &quot;PreferContainedDescriptions&quot;; + rdfs:comment &quot;An IRI to signal the client prefers to receive full descriptions of the Annotations from a container, not just their IRIs.&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedIRIs a rdfs:Resource; + rdfs:label &quot;PreferContainedIRIs&quot;; + rdfs:comment &quot;An IRI to signal that the client prefers to receive only the IRIs of the Annotations from a container, not their full descriptions.&quot;; + rdfs:isDefinedBy oa: . + + oa:annotationService a rdf:Property; + rdfs:label &quot;annotationService&quot;; + rdfs:comment &quot;The object of the relationship is the end point of a service that conforms to the annotation-protocol, and it may be associated with any resource. The expectation of asserting the relationship is that the object is the preferred service for maintaining annotations about the subject resource, according to the publisher of the relationship. This relationship is intended to be used both within Linked Data descriptions and as the rel type of a Link, via HTTP Link Headers rfc5988 for binary resources and in HTML &lt;link&gt; elements. For more information about these, please see the Annotation Protocol specification annotation-protocol.&quot;; + rdfs:isDefinedBy oa: . + + oa:as:first a rdf:Property; + rdfs:label &quot;as:first&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:generator a rdf:Property; + rdfs:label &quot;as:generator&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:items a rdf:Property; + rdfs:label &quot;as:items&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range rdf:List . + + oa:as:last a rdf:Property; + rdfs:label &quot;as:last&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:next a rdf:Property; + rdfs:label &quot;as:next&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:partOf a rdf:Property; + rdfs:label &quot;as:partOf&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt; . + + oa:as:prev a rdf:Property; + rdfs:label &quot;as:prev&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:startIndex a rdf:Property; + rdfs:label &quot;as:startIndex&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:as:totalItems a rdf:Property; + rdfs:label &quot;as:totalItems&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:assessing a oa:Motivation; + rdfs:label &quot;assessing&quot;; + rdfs:comment &quot;The motivation for when the user intends to provide an assessment about the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:bodyValue a rdf:Property; + rdfs:label &quot;bodyValue&quot;; + rdfs:comment &quot;The object of the predicate is a plain text string to be used as the content of the body of the Annotation. The value MUST be an xsd:string and that data type MUST NOT be expressed in the serialization. Note that language MUST NOT be associated with the value either as a language tag, as that is only available for rdf:langString .&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:bookmarking a oa:Motivation; + rdfs:label &quot;bookmarking&quot;; + rdfs:comment &quot;The motivation for when the user intends to create a bookmark to the Target or part thereof.&quot;; + rdfs:isDefinedBy oa: . + + oa:cachedSource a rdf:Property; + rdfs:label &quot;cachedSource&quot;; + rdfs:comment &quot;A object of the relationship is a copy of the Source resource&#39;s representation, appropriate for the Annotation.&quot;; + rdfs:domain oa:TimeState; + rdfs:isDefinedBy oa: . + + oa:canonical a rdf:Property; + rdfs:label &quot;canonical&quot;; + rdfs:comment &quot;A object of the relationship is the canonical IRI that can always be used to deduplicate the Annotation, regardless of the current IRI used to access the representation.&quot;; + rdfs:isDefinedBy oa: . + + oa:classifying a oa:Motivation; + rdfs:label &quot;classifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to that classify the Target as something.&quot;; + rdfs:isDefinedBy oa: . + + oa:commenting a oa:Motivation; + rdfs:label &quot;commenting&quot;; + rdfs:comment &quot;The motivation for when the user intends to comment about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:describing a oa:Motivation; + rdfs:label &quot;describing&quot;; + rdfs:comment &quot;The motivation for when the user intends to describe the Target, as opposed to a comment about them.&quot;; + rdfs:isDefinedBy oa: . + + oa:editing a oa:Motivation; + rdfs:label &quot;editing&quot;; + rdfs:comment &quot;The motivation for when the user intends to request a change or edit to the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:end a rdf:Property; + rdfs:label &quot;end&quot;; + rdfs:comment &quot;The end property is used to convey the 0-based index of the end position of a range of content.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:exact a rdf:Property; + rdfs:label &quot;exact&quot;; + rdfs:comment &quot;The object of the predicate is a copy of the text which is being selected, after normalization.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:hasBody a rdf:Property; + rdfs:label &quot;hasBody&quot;; + rdfs:comment &quot;The object of the relationship is a resource that is a body of the Annotation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:hasEndSelector a rdf:Property; + rdfs:label &quot;hasEndSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the end position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasPurpose a rdf:Property; + rdfs:label &quot;hasPurpose&quot;; + rdfs:comment &quot;The purpose served by the resource in the Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:hasScope a rdf:Property; + rdfs:label &quot;hasScope&quot;; + rdfs:comment &quot;The scope or context in which the resource is used within the Annotation.&quot;; + rdfs:domain oa:SpecificResource; + rdfs:isDefinedBy oa: . + + oa:hasSelector a rdf:Property; + rdfs:label &quot;hasSelector&quot;; + rdfs:comment &quot;The object of the relationship is a Selector that describes the segment or region of interest within the source resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasSource a rdf:Property; + rdfs:label &quot;hasSource&quot;; + rdfs:comment &quot;The resource that the ResourceSelection, or its subclass SpecificResource, is refined from, or more specific than. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa: . + + oa:hasStartSelector a rdf:Property; + rdfs:label &quot;hasStartSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the start position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasState a rdf:Property; + rdfs:label &quot;hasState&quot;; + rdfs:comment &quot;The relationship between the ResourceSelection, or its subclass SpecificResource, and a State resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:State . + + oa:hasTarget a rdf:Property; + rdfs:label &quot;hasTarget&quot;; + rdfs:comment &quot;The relationship between an Annotation and its Target.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:highlighting a oa:Motivation; + rdfs:label &quot;highlighting&quot;; + rdfs:comment &quot;The motivation for when the user intends to highlight the Target resource or segment of it.&quot;; + rdfs:isDefinedBy oa: . + + oa:identifying a oa:Motivation; + rdfs:label &quot;identifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign an identity to the Target or identify what is being depicted or described in the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:linking a oa:Motivation; + rdfs:label &quot;linking&quot;; + rdfs:comment &quot;The motivation for when the user intends to link to a resource related to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:ltrDirection a oa:Direction; + rdfs:label &quot;ltrDirection&quot;; + rdfs:comment &quot;The direction of text that is read from left to right.&quot;; + rdfs:isDefinedBy oa: . + + oa:moderating a oa:Motivation; + rdfs:label &quot;moderating&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign some value or quality to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:motivatedBy a rdf:Property; + rdfs:label &quot;motivatedBy&quot;; + rdfs:comment &quot;The relationship between an Annotation and a Motivation that describes the reason for the Annotation&#39;s creation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:prefix a rdf:Property; + rdfs:label &quot;prefix&quot;; + rdfs:comment &quot;The object of the property is a snippet of content that occurs immediately before the content which is being selected by the Selector.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:processingLanguage a rdf:Property; + rdfs:label &quot;processingLanguage&quot;; + rdfs:comment &quot;The object of the property is the language that should be used for textual processing algorithms when dealing with the content of the resource, including hyphenation, line breaking, which font to use for rendering and so forth. The value must follow the recommendations of BCP47.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:questioning a oa:Motivation; + rdfs:label &quot;questioning&quot;; + rdfs:comment &quot;The motivation for when the user intends to ask a question about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:refinedBy a rdf:Property; + rdfs:label &quot;refinedBy&quot;; + rdfs:comment &quot;The relationship between a Selector and another Selector or a State and a Selector or State that should be applied to the results of the first to refine the processing of the source resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:replying a oa:Motivation; + rdfs:label &quot;replying&quot;; + rdfs:comment &quot;The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:rtlDirection a oa:Direction; + rdfs:label &quot;rtlDirection&quot;; + rdfs:comment &quot;The direction of text that is read from right to left.&quot;; + rdfs:isDefinedBy oa: . + + oa:tagging a oa:Motivation; + rdfs:label &quot;tagging&quot;; + rdfs:comment &quot;The motivation for when the user intends to associate a tag with the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa: a owl:Ontology; + dc11:title &quot;Web Annotation Ontology&quot;; + dc:creator &quot;Robert Sanderson&quot;, + &quot;Paolo Ciccarese&quot;, + &quot;Benjamin Young&quot;; + dc:modified &quot;2016-09-30T16:51:18Z&quot;; + rdfs:comment &quot;The Web Annotation ontology defines the terms of the Web Annotation vocabulary. Any changes to this document MUST be from a Working Group in the W3C that has established expertise in the area.&quot;; + rdfs:seeAlso &lt;http://www.w3.org/TR/annotation-vocab/&gt;; + owl:previousVersionURI &lt;http://www.openannotation.org/spec/core/20130208/oa.owl&gt;; + owl:versionInfo &quot;2016-09-30T16:51:18Z&quot; . + Results: + @prefix dc: &lt;http://purl.org/dc/terms/&gt; . + @prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; . + @prefix oa: &lt;http://www.w3.org/ns/oa#&gt; . + @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; . + @prefix xhv: &lt;http://www.w3.org/1999/xhtml/vocab#&gt; . + @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . + + &lt;http://www.w3.org/ns/oa&gt; dc:title &quot;Web Annotation Ontology&quot;; + &lt;bibo:editor&gt; []; + xhv:license &lt;http://www.w3.org/Consortium/Legal/copyright-documents&gt; . + + oa:respecDocument xhv:role xhv:document . + + oa:respecHeader xhv:role xhv:contentinfo . + + ([ + a foaf:Person; + foaf:homepage &lt;http://www.paolociccarese.info&gt;; + foaf:mbox &lt;mailto:paolo.ciccarese@gmail.com&gt;; + foaf:name &quot;Paolo Ciccarese&quot; + ] [ + a foaf:Person; + foaf:homepage &lt;http://bigbluehat.com/&gt;; + foaf:mbox &lt;mailto:byoung@bigbluehat.com&gt;; + foaf:name &quot;Benjamin Young&quot; + ]) . + + _:g70220666792480 a foaf:Person; + foaf:homepage &lt;http://www.stanford.edu/~azaroth/&gt;; + foaf:mbox &lt;mailto:azaroth42@gmail.com&gt;; + foaf:name &quot;Robert Sanderson&quot;; + foaf:workplaceHomepage &lt;http://www.stanford.edu/&gt; . + + Debug:</pre></div> + <div class="backtrace"><pre>./annotation-vocab_spec.rb:83:in `block (4 levels) in &lt;top (required)&gt;&#39;</pre></div> + <pre class="ruby"><code><span class="linenum">81</span> # XXX Normalize whitespace in literals to ease comparision +<span class="linenum">82</span> fg.each_object {|o| o.squish! if o.literal?} +<span class="offending"><span class="linenum">83</span> expect(fg).to be_equivalent_graph(vocab_graph)</span> +<span class="linenum">84</span> end +<span class="linenum">85</span> end +<span class="linenum">86</span><span class="comment"># Install the coderay gem to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('45.0');</script> + <dd class="example failed"> + <span class="failed_spec_name">rdfxml</span> + <span class="duration">0.80222s</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Failure/Error: expect(fg).to be_equivalent_graph(vocab_graph) + + Graphs differ + + #&lt;struct RDF::Spec::Matchers::Info id=nil, logger=nil, action=nil, result=nil&gt; + Expected: + @prefix dc: &lt;http://purl.org/dc/terms/&gt; . + @prefix dc11: &lt;http://purl.org/dc/elements/1.1/&gt; . + @prefix oa: &lt;http://www.w3.org/ns/oa#&gt; . + @prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; . + @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; . + @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; . + @prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; . + @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . + + oa:Annotation a rdfs:Class; + rdfs:label &quot;Annotation&quot;; + rdfs:comment &quot;The class for Web Annotations.&quot;; + rdfs:isDefinedBy oa: . + + oa:Choice a rdfs:Class; + rdfs:label &quot;Choice&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should select one of the resources in the as:items list to use, rather than all of them. This is typically used to provide a choice of resources to render to the user, based on further supplied properties. If the consuming application cannot determine the user&#39;s preference, then it should use the first in the list.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Composite a rdfs:Class; + rdfs:label &quot;Composite&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use all of the resources in the as:items list, but that order is not important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:CssSelector a rdfs:Class; + rdfs:label &quot;CssSelector&quot;; + rdfs:comment &quot;A CssSelector describes a Segment of interest in a representation that conforms to the Document Object Model through the use of the CSS selector specification.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:CssStyle a rdfs:Class; + rdfs:label &quot;CssStyle&quot;; + rdfs:comment &quot;A resource which describes styles for resources participating in the Annotation using CSS.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Style . + + oa:DataPositionSelector a rdfs:Class; + rdfs:label &quot;DataPositionSelector&quot;; + rdfs:comment &quot;DataPositionSelector describes a range of data by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first byte, position 1 would be immediately before the second byte, and so on. The start byte is thus included in the list, but the end byte is not.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:Direction a rdfs:Class; + rdfs:label &quot;Direction&quot;; + rdfs:comment &quot;A class to encapsulate the different text directions that a textual resource might take. It is not used directly in the Annotation Model, only its three instances.&quot;; + rdfs:isDefinedBy oa: . + + oa:FragmentSelector a rdfs:Class; + rdfs:label &quot;FragmentSelector&quot;; + rdfs:comment &quot;The FragmentSelector class is used to record the segment of a representation using the IRI fragment specification defined by the representation&#39;s media type.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:HttpRequestState a rdfs:Class; + rdfs:label &quot;HttpRequestState&quot;; + rdfs:comment &quot;The HttpRequestState class is used to record the HTTP request headers that a client SHOULD use to request the correct representation from the resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:Independents a rdfs:Class; + rdfs:label &quot;Independents&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that each of the resources in the as:items list are independently associated with all of the other bodies or targets. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:List a rdfs:Class; + rdfs:label &quot;List&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use each of the resources in the as:items list, and that their order is important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Motivation a rdfs:Class; + rdfs:label &quot;Motivation&quot;; + rdfs:comment &quot;The Motivation class is used to record the user&#39;s intent or motivation for the creation of the Annotation, or the inclusion of the body or target, that it is associated with.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf skos:Concept . + + oa:RangeSelector a rdfs:Class; + rdfs:label &quot;RangeSelector&quot;; + rdfs:comment &quot;A Range Selector can be used to identify the beginning and the end of the selection by using other Selectors. The selection consists of everything from the beginning of the starting selector through to the beginning of the ending selector, but not including it.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:ResourceSelection a rdfs:Class; + rdfs:label &quot;ResourceSelection&quot;; + rdfs:comment &quot;Instances of the ResourceSelection class identify part (described by an oa:Selector) of another resource (referenced with oa:hasSource), possibly from a particular representation of a resource (described by an oa:State). Please note that ResourceSelection is not used directly in the Web Annotation model, but is provided as a separate class for further application profiles to use, separate from oa:SpecificResource which has many Annotation specific features.&quot;; + rdfs:isDefinedBy oa: . + + oa:Selector a rdfs:Class; + rdfs:label &quot;Selector&quot;; + rdfs:comment &quot;A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. This class is not used directly in the Annotation model, only its subclasses.&quot;; + rdfs:isDefinedBy oa: . + + oa:SpecificResource a rdfs:Class; + rdfs:label &quot;SpecificResource&quot;; + rdfs:comment &quot;Instances of the SpecificResource class identify part of another resource (referenced with oa:hasSource), a particular representation of a resource, a resource with styling hints for renders, or any combination of these, as used within an Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:ResourceSelection . + + oa:State a rdfs:Class; + rdfs:label &quot;State&quot;; + rdfs:comment &quot;A State describes the intended state of a resource as applied to the particular Annotation, and thus provides the information needed to retrieve the correct representation of that resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:Style a rdfs:Class; + rdfs:label &quot;Style&quot;; + rdfs:comment &quot;A Style describes the intended styling of a resource as applied to the particular Annotation, and thus provides the information to ensure that rendering is consistent across implementations.&quot;; + rdfs:isDefinedBy oa: . + + oa:SvgSelector a rdfs:Class; + rdfs:label &quot;SvgSelector&quot;; + rdfs:comment &quot;An SvgSelector defines an area through the use of the Scalable Vector Graphics [SVG] standard. This allows the user to select a non-rectangular area of the content, such as a circle or polygon by describing the region using SVG. The SVG may be either embedded within the Annotation or referenced as an External Resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextPositionSelector a rdfs:Class; + rdfs:label &quot;TextPositionSelector&quot;; + rdfs:comment &quot;The TextPositionSelector describes a range of text by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first character, position 1 would be immediately before the second character, and so on.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextQuoteSelector a rdfs:Class; + rdfs:label &quot;TextQuoteSelector&quot;; + rdfs:comment &quot;The TextQuoteSelector describes a range of text by copying it, and including some of the text immediately before (a prefix) and after (a suffix) it to distinguish between multiple copies of the same sequence of characters.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextualBody a rdfs:Class; + rdfs:label &quot;TextualBody&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:TimeState a rdfs:Class; + rdfs:label &quot;TimeState&quot;; + rdfs:comment &quot;A TimeState records the time at which the resource&#39;s state is appropriate for the Annotation, typically the time that the Annotation was created and/or a link to a persistent copy of the current version.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:XPathSelector a rdfs:Class; + rdfs:label &quot;XPathSelector&quot;; + rdfs:comment &quot;An XPathSelector is used to select elements and content within a resource that supports the Document Object Model via a specified XPath value.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:as:Application a rdfs:Class; + rdfs:label &quot;as:Application&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollection a rdfs:Class; + rdfs:label &quot;as:OrderedCollection&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollectionPage a rdfs:Class; + rdfs:label &quot;as:OrderedCollectionPage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Dataset a rdfs:Class; + rdfs:label &quot;dctypes:Dataset&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:MovingImage a rdfs:Class; + rdfs:label &quot;dctypes:MovingImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Sound a rdfs:Class; + rdfs:label &quot;dctypes:Sound&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:StillImage a rdfs:Class; + rdfs:label &quot;dctypes:StillImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Text a rdfs:Class; + rdfs:label &quot;dctypes:Text&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Organization a rdfs:Class; + rdfs:label &quot;foaf:Organization&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Person a rdfs:Class; + rdfs:label &quot;foaf:Person&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:schema:Audience a rdfs:Class; + rdfs:label &quot;schema:Audience&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedDescriptions a rdfs:Resource; + rdfs:label &quot;PreferContainedDescriptions&quot;; + rdfs:comment &quot;An IRI to signal the client prefers to receive full descriptions of the Annotations from a container, not just their IRIs.&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedIRIs a rdfs:Resource; + rdfs:label &quot;PreferContainedIRIs&quot;; + rdfs:comment &quot;An IRI to signal that the client prefers to receive only the IRIs of the Annotations from a container, not their full descriptions.&quot;; + rdfs:isDefinedBy oa: . + + oa:annotationService a rdf:Property; + rdfs:label &quot;annotationService&quot;; + rdfs:comment &quot;The object of the relationship is the end point of a service that conforms to the annotation-protocol, and it may be associated with any resource. The expectation of asserting the relationship is that the object is the preferred service for maintaining annotations about the subject resource, according to the publisher of the relationship. This relationship is intended to be used both within Linked Data descriptions and as the rel type of a Link, via HTTP Link Headers rfc5988 for binary resources and in HTML &lt;link&gt; elements. For more information about these, please see the Annotation Protocol specification annotation-protocol.&quot;; + rdfs:isDefinedBy oa: . + + oa:as:first a rdf:Property; + rdfs:label &quot;as:first&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:generator a rdf:Property; + rdfs:label &quot;as:generator&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:items a rdf:Property; + rdfs:label &quot;as:items&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range rdf:List . + + oa:as:last a rdf:Property; + rdfs:label &quot;as:last&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:next a rdf:Property; + rdfs:label &quot;as:next&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:partOf a rdf:Property; + rdfs:label &quot;as:partOf&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt; . + + oa:as:prev a rdf:Property; + rdfs:label &quot;as:prev&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:startIndex a rdf:Property; + rdfs:label &quot;as:startIndex&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:as:totalItems a rdf:Property; + rdfs:label &quot;as:totalItems&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:assessing a oa:Motivation; + rdfs:label &quot;assessing&quot;; + rdfs:comment &quot;The motivation for when the user intends to provide an assessment about the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:bodyValue a rdf:Property; + rdfs:label &quot;bodyValue&quot;; + rdfs:comment &quot;The object of the predicate is a plain text string to be used as the content of the body of the Annotation. The value MUST be an xsd:string and that data type MUST NOT be expressed in the serialization. Note that language MUST NOT be associated with the value either as a language tag, as that is only available for rdf:langString .&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:bookmarking a oa:Motivation; + rdfs:label &quot;bookmarking&quot;; + rdfs:comment &quot;The motivation for when the user intends to create a bookmark to the Target or part thereof.&quot;; + rdfs:isDefinedBy oa: . + + oa:cachedSource a rdf:Property; + rdfs:label &quot;cachedSource&quot;; + rdfs:comment &quot;A object of the relationship is a copy of the Source resource&#39;s representation, appropriate for the Annotation.&quot;; + rdfs:domain oa:TimeState; + rdfs:isDefinedBy oa: . + + oa:canonical a rdf:Property; + rdfs:label &quot;canonical&quot;; + rdfs:comment &quot;A object of the relationship is the canonical IRI that can always be used to deduplicate the Annotation, regardless of the current IRI used to access the representation.&quot;; + rdfs:isDefinedBy oa: . + + oa:classifying a oa:Motivation; + rdfs:label &quot;classifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to that classify the Target as something.&quot;; + rdfs:isDefinedBy oa: . + + oa:commenting a oa:Motivation; + rdfs:label &quot;commenting&quot;; + rdfs:comment &quot;The motivation for when the user intends to comment about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:describing a oa:Motivation; + rdfs:label &quot;describing&quot;; + rdfs:comment &quot;The motivation for when the user intends to describe the Target, as opposed to a comment about them.&quot;; + rdfs:isDefinedBy oa: . + + oa:editing a oa:Motivation; + rdfs:label &quot;editing&quot;; + rdfs:comment &quot;The motivation for when the user intends to request a change or edit to the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:end a rdf:Property; + rdfs:label &quot;end&quot;; + rdfs:comment &quot;The end property is used to convey the 0-based index of the end position of a range of content.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:exact a rdf:Property; + rdfs:label &quot;exact&quot;; + rdfs:comment &quot;The object of the predicate is a copy of the text which is being selected, after normalization.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:hasBody a rdf:Property; + rdfs:label &quot;hasBody&quot;; + rdfs:comment &quot;The object of the relationship is a resource that is a body of the Annotation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:hasEndSelector a rdf:Property; + rdfs:label &quot;hasEndSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the end position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasPurpose a rdf:Property; + rdfs:label &quot;hasPurpose&quot;; + rdfs:comment &quot;The purpose served by the resource in the Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:hasScope a rdf:Property; + rdfs:label &quot;hasScope&quot;; + rdfs:comment &quot;The scope or context in which the resource is used within the Annotation.&quot;; + rdfs:domain oa:SpecificResource; + rdfs:isDefinedBy oa: . + + oa:hasSelector a rdf:Property; + rdfs:label &quot;hasSelector&quot;; + rdfs:comment &quot;The object of the relationship is a Selector that describes the segment or region of interest within the source resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasSource a rdf:Property; + rdfs:label &quot;hasSource&quot;; + rdfs:comment &quot;The resource that the ResourceSelection, or its subclass SpecificResource, is refined from, or more specific than. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa: . + + oa:hasStartSelector a rdf:Property; + rdfs:label &quot;hasStartSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the start position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasState a rdf:Property; + rdfs:label &quot;hasState&quot;; + rdfs:comment &quot;The relationship between the ResourceSelection, or its subclass SpecificResource, and a State resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:State . + + oa:hasTarget a rdf:Property; + rdfs:label &quot;hasTarget&quot;; + rdfs:comment &quot;The relationship between an Annotation and its Target.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:highlighting a oa:Motivation; + rdfs:label &quot;highlighting&quot;; + rdfs:comment &quot;The motivation for when the user intends to highlight the Target resource or segment of it.&quot;; + rdfs:isDefinedBy oa: . + + oa:identifying a oa:Motivation; + rdfs:label &quot;identifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign an identity to the Target or identify what is being depicted or described in the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:linking a oa:Motivation; + rdfs:label &quot;linking&quot;; + rdfs:comment &quot;The motivation for when the user intends to link to a resource related to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:ltrDirection a oa:Direction; + rdfs:label &quot;ltrDirection&quot;; + rdfs:comment &quot;The direction of text that is read from left to right.&quot;; + rdfs:isDefinedBy oa: . + + oa:moderating a oa:Motivation; + rdfs:label &quot;moderating&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign some value or quality to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:motivatedBy a rdf:Property; + rdfs:label &quot;motivatedBy&quot;; + rdfs:comment &quot;The relationship between an Annotation and a Motivation that describes the reason for the Annotation&#39;s creation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:prefix a rdf:Property; + rdfs:label &quot;prefix&quot;; + rdfs:comment &quot;The object of the property is a snippet of content that occurs immediately before the content which is being selected by the Selector.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:processingLanguage a rdf:Property; + rdfs:label &quot;processingLanguage&quot;; + rdfs:comment &quot;The object of the property is the language that should be used for textual processing algorithms when dealing with the content of the resource, including hyphenation, line breaking, which font to use for rendering and so forth. The value must follow the recommendations of BCP47.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:questioning a oa:Motivation; + rdfs:label &quot;questioning&quot;; + rdfs:comment &quot;The motivation for when the user intends to ask a question about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:refinedBy a rdf:Property; + rdfs:label &quot;refinedBy&quot;; + rdfs:comment &quot;The relationship between a Selector and another Selector or a State and a Selector or State that should be applied to the results of the first to refine the processing of the source resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:replying a oa:Motivation; + rdfs:label &quot;replying&quot;; + rdfs:comment &quot;The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:rtlDirection a oa:Direction; + rdfs:label &quot;rtlDirection&quot;; + rdfs:comment &quot;The direction of text that is read from right to left.&quot;; + rdfs:isDefinedBy oa: . + + oa:tagging a oa:Motivation; + rdfs:label &quot;tagging&quot;; + rdfs:comment &quot;The motivation for when the user intends to associate a tag with the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa: a owl:Ontology; + dc11:title &quot;Web Annotation Ontology&quot;; + dc:creator &quot;Robert Sanderson&quot;, + &quot;Paolo Ciccarese&quot;, + &quot;Benjamin Young&quot;; + dc:modified &quot;2016-09-30T16:51:18Z&quot;; + rdfs:comment &quot;The Web Annotation ontology defines the terms of the Web Annotation vocabulary. Any changes to this document MUST be from a Working Group in the W3C that has established expertise in the area.&quot;; + rdfs:seeAlso &lt;http://www.w3.org/TR/annotation-vocab/&gt;; + owl:previousVersionURI &lt;http://www.openannotation.org/spec/core/20130208/oa.owl&gt;; + owl:versionInfo &quot;2016-09-30T16:51:18Z&quot; . + Results: + @prefix dc: &lt;http://purl.org/dc/terms/&gt; . + @prefix dc11: &lt;http://purl.org/dc/elements/1.1/&gt; . + @prefix oa: &lt;http://www.w3.org/ns/oa#&gt; . + @prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; . + @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; . + @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; . + @prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; . + @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . + + oa:Annotation a rdfs:Class; + rdfs:label &quot;Annotation&quot;; + rdfs:comment &quot;The class for Web Annotations.&quot;; + rdfs:isDefinedBy oa: . + + oa:Choice a rdfs:Class; + rdfs:label &quot;Choice&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should select one of the resources in the as:items list to use, rather than all of them. This is typically used to provide a choice of resources to render to the user, based on further supplied properties. If the consuming application cannot determine the user&#39;s preference, then it should use the first in the list.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Composite a rdfs:Class; + rdfs:label &quot;Composite&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use all of the resources in the as:items list, but that order is not important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:CssSelector a rdfs:Class; + rdfs:label &quot;CssSelector&quot;; + rdfs:comment &quot;A CssSelector describes a Segment of interest in a representation that conforms to the Document Object Model through the use of the CSS selector specification.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:CssStyle a rdfs:Class; + rdfs:label &quot;CssStyle&quot;; + rdfs:comment &quot;A resource which describes styles for resources participating in the Annotation using CSS.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Style . + + oa:DataPositionSelector a rdfs:Class; + rdfs:label &quot;DataPositionSelector&quot;; + rdfs:comment &quot;DataPositionSelector describes a range of data by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first byte, position 1 would be immediately before the second byte, and so on. The start byte is thus included in the list, but the end byte is not.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:Direction a rdfs:Class; + rdfs:label &quot;Direction&quot;; + rdfs:comment &quot;A class to encapsulate the different text directions that a textual resource might take. It is not used directly in the Annotation Model, only its three instances.&quot;; + rdfs:isDefinedBy oa: . + + oa:FragmentSelector a rdfs:Class; + rdfs:label &quot;FragmentSelector&quot;; + rdfs:comment &quot;The FragmentSelector class is used to record the segment of a representation using the IRI fragment specification defined by the representation&#39;s media type.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:HttpRequestState a rdfs:Class; + rdfs:label &quot;HttpRequestState&quot;; + rdfs:comment &quot;The HttpRequestState class is used to record the HTTP request headers that a client SHOULD use to request the correct representation from the resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:Independents a rdfs:Class; + rdfs:label &quot;Independents&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that each of the resources in the as:items list are independently associated with all of the other bodies or targets. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:List a rdfs:Class; + rdfs:label &quot;List&quot;; + rdfs:comment &quot;A subClass of as:OrderedCollection that conveys to a consuming application that it should use each of the resources in the as:items list, and that their order is important. This class is at-risk.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:as:OrderedCollection . + + oa:Motivation a rdfs:Class; + rdfs:label &quot;Motivation&quot;; + rdfs:comment &quot;The Motivation class is used to record the user&#39;s intent or motivation for the creation of the Annotation, or the inclusion of the body or target, that it is associated with.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf skos:Concept . + + oa:RangeSelector a rdfs:Class; + rdfs:label &quot;RangeSelector&quot;; + rdfs:comment &quot;A Range Selector can be used to identify the beginning and the end of the selection by using other Selectors. The selection consists of everything from the beginning of the starting selector through to the beginning of the ending selector, but not including it.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:ResourceSelection a rdfs:Class; + rdfs:label &quot;ResourceSelection&quot;; + rdfs:comment &quot;Instances of the ResourceSelection class identify part (described by an oa:Selector) of another resource (referenced with oa:hasSource), possibly from a particular representation of a resource (described by an oa:State). Please note that ResourceSelection is not used directly in the Web Annotation model, but is provided as a separate class for further application profiles to use, separate from oa:SpecificResource which has many Annotation specific features.&quot;; + rdfs:isDefinedBy oa: . + + oa:Selector a rdfs:Class; + rdfs:label &quot;Selector&quot;; + rdfs:comment &quot;A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. This class is not used directly in the Annotation model, only its subclasses.&quot;; + rdfs:isDefinedBy oa: . + + oa:SpecificResource a rdfs:Class; + rdfs:label &quot;SpecificResource&quot;; + rdfs:comment &quot;Instances of the SpecificResource class identify part of another resource (referenced with oa:hasSource), a particular representation of a resource, a resource with styling hints for renders, or any combination of these, as used within an Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:ResourceSelection . + + oa:State a rdfs:Class; + rdfs:label &quot;State&quot;; + rdfs:comment &quot;A State describes the intended state of a resource as applied to the particular Annotation, and thus provides the information needed to retrieve the correct representation of that resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:Style a rdfs:Class; + rdfs:label &quot;Style&quot;; + rdfs:comment &quot;A Style describes the intended styling of a resource as applied to the particular Annotation, and thus provides the information to ensure that rendering is consistent across implementations.&quot;; + rdfs:isDefinedBy oa: . + + oa:SvgSelector a rdfs:Class; + rdfs:label &quot;SvgSelector&quot;; + rdfs:comment &quot;An SvgSelector defines an area through the use of the Scalable Vector Graphics [SVG] standard. This allows the user to select a non-rectangular area of the content, such as a circle or polygon by describing the region using SVG. The SVG may be either embedded within the Annotation or referenced as an External Resource.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextPositionSelector a rdfs:Class; + rdfs:label &quot;TextPositionSelector&quot;; + rdfs:comment &quot;The TextPositionSelector describes a range of text by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first character, position 1 would be immediately before the second character, and so on.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextQuoteSelector a rdfs:Class; + rdfs:label &quot;TextQuoteSelector&quot;; + rdfs:comment &quot;The TextQuoteSelector describes a range of text by copying it, and including some of the text immediately before (a prefix) and after (a suffix) it to distinguish between multiple copies of the same sequence of characters.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:TextualBody a rdfs:Class; + rdfs:label &quot;TextualBody&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:TimeState a rdfs:Class; + rdfs:label &quot;TimeState&quot;; + rdfs:comment &quot;A TimeState records the time at which the resource&#39;s state is appropriate for the Annotation, typically the time that the Annotation was created and/or a link to a persistent copy of the current version.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:State . + + oa:XPathSelector a rdfs:Class; + rdfs:label &quot;XPathSelector&quot;; + rdfs:comment &quot;An XPathSelector is used to select elements and content within a resource that supports the Document Object Model via a specified XPath value.&quot;; + rdfs:isDefinedBy oa:; + rdfs:subClassOf oa:Selector . + + oa:as:Application a rdfs:Class; + rdfs:label &quot;as:Application&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollection a rdfs:Class; + rdfs:label &quot;as:OrderedCollection&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:OrderedCollectionPage a rdfs:Class; + rdfs:label &quot;as:OrderedCollectionPage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Dataset a rdfs:Class; + rdfs:label &quot;dctypes:Dataset&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:MovingImage a rdfs:Class; + rdfs:label &quot;dctypes:MovingImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Sound a rdfs:Class; + rdfs:label &quot;dctypes:Sound&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:StillImage a rdfs:Class; + rdfs:label &quot;dctypes:StillImage&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:dctypes:Text a rdfs:Class; + rdfs:label &quot;dctypes:Text&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Organization a rdfs:Class; + rdfs:label &quot;foaf:Organization&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:foaf:Person a rdfs:Class; + rdfs:label &quot;foaf:Person&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:schema:Audience a rdfs:Class; + rdfs:label &quot;schema:Audience&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedDescriptions a rdfs:Resource; + rdfs:label &quot;PreferContainedDescriptions&quot;; + rdfs:comment &quot;An IRI to signal the client prefers to receive full descriptions of the Annotations from a container, not just their IRIs.&quot;; + rdfs:isDefinedBy oa: . + + oa:PreferContainedIRIs a rdfs:Resource; + rdfs:label &quot;PreferContainedIRIs&quot;; + rdfs:comment &quot;An IRI to signal that the client prefers to receive only the IRIs of the Annotations from a container, not their full descriptions.&quot;; + rdfs:isDefinedBy oa: . + + oa:annotationService a rdf:Property; + rdfs:label &quot;annotationService&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:first a rdf:Property; + rdfs:label &quot;as:first&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:generator a rdf:Property; + rdfs:label &quot;as:generator&quot;; + rdfs:comment &quot;&quot;; + rdfs:isDefinedBy oa: . + + oa:as:items a rdf:Property; + rdfs:label &quot;as:items&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range rdf:List . + + oa:as:last a rdf:Property; + rdfs:label &quot;as:last&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain oa:as:OrderedCollection; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:next a rdf:Property; + rdfs:label &quot;as:next&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:partOf a rdf:Property; + rdfs:label &quot;as:partOf&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt; . + + oa:as:prev a rdf:Property; + rdfs:label &quot;as:prev&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt; . + + oa:as:startIndex a rdf:Property; + rdfs:label &quot;as:startIndex&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollectionPage&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:as:totalItems a rdf:Property; + rdfs:label &quot;as:totalItems&quot;; + rdfs:comment &quot;&quot;; + rdfs:domain &lt;http://www.w3.org/ns/activitystreams#OrderedCollection&gt;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:assessing a oa:Motivation; + rdfs:label &quot;assessing&quot;; + rdfs:comment &quot;The motivation for when the user intends to provide an assessment about the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:bodyValue a rdf:Property; + rdfs:label &quot;bodyValue&quot;; + rdfs:comment &quot;The object of the predicate is a plain text string to be used as the content of the body of the Annotation. The value MUST be an xsd:string and that data type MUST NOT be expressed in the serialization. Note that language MUST NOT be associated with the value either as a language tag, as that is only available for rdf:langString .&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:bookmarking a oa:Motivation; + rdfs:label &quot;bookmarking&quot;; + rdfs:comment &quot;The motivation for when the user intends to create a bookmark to the Target or part thereof.&quot;; + rdfs:isDefinedBy oa: . + + oa:cachedSource a rdf:Property; + rdfs:label &quot;cachedSource&quot;; + rdfs:comment &quot;A object of the relationship is a copy of the Source resource&#39;s representation, appropriate for the Annotation.&quot;; + rdfs:domain oa:TimeState; + rdfs:isDefinedBy oa: . + + oa:canonical a rdf:Property; + rdfs:label &quot;canonical&quot;; + rdfs:comment &quot;A object of the relationship is the canonical IRI that can always be used to deduplicate the Annotation, regardless of the current IRI used to access the representation.&quot;; + rdfs:isDefinedBy oa: . + + oa:classifying a oa:Motivation; + rdfs:label &quot;classifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to that classify the Target as something.&quot;; + rdfs:isDefinedBy oa: . + + oa:commenting a oa:Motivation; + rdfs:label &quot;commenting&quot;; + rdfs:comment &quot;The motivation for when the user intends to comment about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:describing a oa:Motivation; + rdfs:label &quot;describing&quot;; + rdfs:comment &quot;The motivation for when the user intends to describe the Target, as opposed to a comment about them.&quot;; + rdfs:isDefinedBy oa: . + + oa:editing a oa:Motivation; + rdfs:label &quot;editing&quot;; + rdfs:comment &quot;The motivation for when the user intends to request a change or edit to the Target resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:end a rdf:Property; + rdfs:label &quot;end&quot;; + rdfs:comment &quot;The end property is used to convey the 0-based index of the end position of a range of content.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:nonNegativeInteger . + + oa:exact a rdf:Property; + rdfs:label &quot;exact&quot;; + rdfs:comment &quot;The object of the predicate is a copy of the text which is being selected, after normalization.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:hasBody a rdf:Property; + rdfs:label &quot;hasBody&quot;; + rdfs:comment &quot;The object of the relationship is a resource that is a body of the Annotation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:hasEndSelector a rdf:Property; + rdfs:label &quot;hasEndSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the end position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasPurpose a rdf:Property; + rdfs:label &quot;hasPurpose&quot;; + rdfs:comment &quot;The purpose served by the resource in the Annotation.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:hasScope a rdf:Property; + rdfs:label &quot;hasScope&quot;; + rdfs:comment &quot;The scope or context in which the resource is used within the Annotation.&quot;; + rdfs:domain oa:SpecificResource; + rdfs:isDefinedBy oa: . + + oa:hasSelector a rdf:Property; + rdfs:label &quot;hasSelector&quot;; + rdfs:comment &quot;The object of the relationship is a Selector that describes the segment or region of interest within the source resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasSource a rdf:Property; + rdfs:label &quot;hasSource&quot;; + rdfs:comment &quot;The resource that the ResourceSelection, or its subclass SpecificResource, is refined from, or more specific than. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa: . + + oa:hasStartSelector a rdf:Property; + rdfs:label &quot;hasStartSelector&quot;; + rdfs:comment &quot;The relationship between a RangeSelector and the Selector that describes the start position of the range.&quot;; + rdfs:domain oa:RangeSelector; + rdfs:isDefinedBy oa:; + rdfs:range oa:Selector . + + oa:hasState a rdf:Property; + rdfs:label &quot;hasState&quot;; + rdfs:comment &quot;The relationship between the ResourceSelection, or its subclass SpecificResource, and a State resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model.&quot;; + rdfs:domain oa:ResourceSelection; + rdfs:isDefinedBy oa:; + rdfs:range oa:State . + + oa:hasTarget a rdf:Property; + rdfs:label &quot;hasTarget&quot;; + rdfs:comment &quot;The relationship between an Annotation and its Target.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa: . + + oa:highlighting a oa:Motivation; + rdfs:label &quot;highlighting&quot;; + rdfs:comment &quot;The motivation for when the user intends to highlight the Target resource or segment of it.&quot;; + rdfs:isDefinedBy oa: . + + oa:identifying a oa:Motivation; + rdfs:label &quot;identifying&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign an identity to the Target or identify what is being depicted or described in the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:linking a oa:Motivation; + rdfs:label &quot;linking&quot;; + rdfs:comment &quot;The motivation for when the user intends to link to a resource related to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:ltrDirection a oa:Direction; + rdfs:label &quot;ltrDirection&quot;; + rdfs:comment &quot;The direction of text that is read from left to right.&quot;; + rdfs:isDefinedBy oa: . + + oa:moderating a oa:Motivation; + rdfs:label &quot;moderating&quot;; + rdfs:comment &quot;The motivation for when the user intends to assign some value or quality to the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:motivatedBy a rdf:Property; + rdfs:label &quot;motivatedBy&quot;; + rdfs:comment &quot;The relationship between an Annotation and a Motivation that describes the reason for the Annotation&#39;s creation.&quot;; + rdfs:domain oa:Annotation; + rdfs:isDefinedBy oa:; + rdfs:range oa:Motivation . + + oa:prefix a rdf:Property; + rdfs:label &quot;prefix&quot;; + rdfs:comment &quot;The object of the property is a snippet of content that occurs immediately before the content which is being selected by the Selector.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:processingLanguage a rdf:Property; + rdfs:label &quot;processingLanguage&quot;; + rdfs:comment &quot;The object of the property is the language that should be used for textual processing algorithms when dealing with the content of the resource, including hyphenation, line breaking, which font to use for rendering and so forth. The value must follow the recommendations of BCP47.&quot;; + rdfs:isDefinedBy oa:; + rdfs:range xsd:string . + + oa:questioning a oa:Motivation; + rdfs:label &quot;questioning&quot;; + rdfs:comment &quot;The motivation for when the user intends to ask a question about the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa:refinedBy a rdf:Property; + rdfs:label &quot;refinedBy&quot;; + rdfs:comment &quot;The relationship between a Selector and another Selector or a State and a Selector or State that should be applied to the results of the first to refine the processing of the source resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:replying a oa:Motivation; + rdfs:label &quot;replying&quot;; + rdfs:comment &quot;The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource.&quot;; + rdfs:isDefinedBy oa: . + + oa:rtlDirection a oa:Direction; + rdfs:label &quot;rtlDirection&quot;; + rdfs:comment &quot;The direction of text that is read from right to left.&quot;; + rdfs:isDefinedBy oa: . + + oa:tagging a oa:Motivation; + rdfs:label &quot;tagging&quot;; + rdfs:comment &quot;The motivation for when the user intends to associate a tag with the Target.&quot;; + rdfs:isDefinedBy oa: . + + oa: a owl:Ontology; + dc11:title &quot;Web Annotation Ontology&quot;; + dc:creator &quot;Robert Sanderson&quot;, + &quot;Paolo Ciccarese&quot;, + &quot;Benjamin Young&quot;; + dc:modified &quot;2016-09-30T16:51:18Z&quot;; + rdfs:comment &quot;The Web Annotation ontology defines the terms of the Web Annotation vocabulary. Any changes to this document MUST be from a Working Group in the W3C that has established expertise in the area.&quot;; + rdfs:seeAlso &lt;http://www.w3.org/TR/annotation-vocab/&gt;; + owl:previousVersionURI &lt;http://www.openannotation.org/spec/core/20130208/oa.owl&gt;; + owl:versionInfo &quot;2016-09-30T16:51:18Z&quot; . + + Debug:</pre></div> + <div class="backtrace"><pre>./annotation-vocab_spec.rb:83:in `block (4 levels) in &lt;top (required)&gt;&#39;</pre></div> + <pre class="ruby"><code><span class="linenum">81</span> # XXX Normalize whitespace in literals to ease comparision +<span class="linenum">82</span> fg.each_object {|o| o.squish! if o.literal?} +<span class="offending"><span class="linenum">83</span> expect(fg).to be_equivalent_graph(vocab_graph)</span> +<span class="linenum">84</span> end +<span class="linenum">85</span> end +<span class="linenum">86</span><span class="comment"># Install the coderay gem to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('45.3');</script> + <dd class="example passed"><span class="passed_spec_name">ttl</span><span class='duration'>0.48723s</span></dd> + </dl> +</div> +<div id="div_group_6" class="example_group passed"> + <dl style="margin-left: 15px;"> + <dt id="example_group_6" class="passed">The ontology is internally consistent with respect to domains, ranges, inverses, and any other ontology features specified.</dt> + <script type="text/javascript">makeRed('div_group_6');</script> + <script type="text/javascript">makeRed('example_group_6');</script> + <script type="text/javascript">moveProgressBar('45.6');</script> + <dd class="example failed"> + <span class="failed_spec_name">lints cleanly</span> + <span class="duration">2.09350s</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Failure/Error: expect(entailed_graph.lint).to be_empty + expected `{:property=&gt;{&quot;dc:creator&quot;=&gt;[&quot;Object \&quot;Robert Sanderson\&quot; not compatible with range (dc:Agent)&quot;, &quot;Obje...mpatible with range (dc:Agent)&quot;, &quot;Object \&quot;Benjamin Young\&quot; not compatible with range (dc:Agent)&quot;]}}.empty?` to return true, got false</pre></div> + <div class="backtrace"><pre>./annotation-vocab_spec.rb:91:in `block (3 levels) in &lt;top (required)&gt;&#39;</pre></div> + <pre class="ruby"><code><span class="linenum">89</span> it "lints cleanly" do +<span class="linenum">90</span> entailed_graph = vocab_graph.dup.entail! +<span class="offending"><span class="linenum">91</span> expect(entailed_graph.lint).to be_empty</span> +<span class="linenum">92</span> end +<span class="linenum">93</span> +<span class="linenum">94</span><span class="comment"># Install the coderay gem to get syntax highlighting</span></code></pre> + </div> + </dd> + </dl> +</div> +<div id="div_group_7" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_7" class="passed">oa:Annotation</dt> + <script type="text/javascript">moveProgressBar('46.0');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00013s</span></dd> + <script type="text/javascript">moveProgressBar('46.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00057s</span></dd> + </dl> +</div> +<div id="div_group_8" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_8" class="passed">oa:Choice</dt> + <script type="text/javascript">moveProgressBar('46.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.01390s</span></dd> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00054s</span></dd> + </dl> +</div> +<div id="div_group_9" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_9" class="passed">oa:Composite</dt> + <script type="text/javascript">moveProgressBar('47.3');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00201s</span></dd> + <script type="text/javascript">moveProgressBar('47.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00046s</span></dd> + </dl> +</div> +<div id="div_group_10" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_10" class="passed">oa:CssSelector</dt> + <script type="text/javascript">moveProgressBar('48.0');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('48.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_11" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_11" class="passed">oa:CssStyle</dt> + <script type="text/javascript">moveProgressBar('48.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('49.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_12" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_12" class="passed">oa:DataPositionSelector</dt> + <script type="text/javascript">moveProgressBar('49.3');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('49.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00059s</span></dd> + </dl> +</div> +<div id="div_group_13" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_13" class="passed">oa:Direction</dt> + <script type="text/javascript">moveProgressBar('50.0');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('50.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_14" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_14" class="passed">oa:FragmentSelector</dt> + <script type="text/javascript">moveProgressBar('50.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('50.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00047s</span></dd> + </dl> +</div> +<div id="div_group_15" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_15" class="passed">oa:HttpRequestState</dt> + <script type="text/javascript">moveProgressBar('51.3');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00090s</span></dd> + <script type="text/javascript">moveProgressBar('51.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00047s</span></dd> + </dl> +</div> +<div id="div_group_16" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_16" class="passed">oa:Independents</dt> + <script type="text/javascript">moveProgressBar('51.9');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00204s</span></dd> + <script type="text/javascript">moveProgressBar('52.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00046s</span></dd> + </dl> +</div> +<div id="div_group_17" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_17" class="passed">oa:List</dt> + <script type="text/javascript">moveProgressBar('52.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00220s</span></dd> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00052s</span></dd> + </dl> +</div> +<div id="div_group_18" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_18" class="passed">oa:Motivation</dt> + <script type="text/javascript">moveProgressBar('53.3');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00120s</span></dd> + <script type="text/javascript">moveProgressBar('53.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00053s</span></dd> + </dl> +</div> +<div id="div_group_19" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_19" class="passed">oa:RangeSelector</dt> + <script type="text/javascript">moveProgressBar('53.9');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00093s</span></dd> + <script type="text/javascript">moveProgressBar('54.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00048s</span></dd> + </dl> +</div> +<div id="div_group_20" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_20" class="passed">oa:ResourceSelection</dt> + <script type="text/javascript">moveProgressBar('54.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('54.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_21" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_21" class="passed">oa:Selector</dt> + <script type="text/javascript">moveProgressBar('55.2');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('55.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_22" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_22" class="passed">oa:SpecificResource</dt> + <script type="text/javascript">moveProgressBar('55.9');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('56.2');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00050s</span></dd> + </dl> +</div> +<div id="div_group_23" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_23" class="passed">oa:State</dt> + <script type="text/javascript">moveProgressBar('56.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('56.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00048s</span></dd> + </dl> +</div> +<div id="div_group_24" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_24" class="passed">oa:Style</dt> + <script type="text/javascript">moveProgressBar('57.2');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('57.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00048s</span></dd> + </dl> +</div> +<div id="div_group_25" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_25" class="passed">oa:SvgSelector</dt> + <script type="text/javascript">moveProgressBar('57.9');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00086s</span></dd> + <script type="text/javascript">moveProgressBar('58.2');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00050s</span></dd> + </dl> +</div> +<div id="div_group_26" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_26" class="passed">oa:TextPositionSelector</dt> + <script type="text/javascript">moveProgressBar('58.6');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00091s</span></dd> + <script type="text/javascript">moveProgressBar('58.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_27" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_27" class="passed">oa:TextQuoteSelector</dt> + <script type="text/javascript">moveProgressBar('59.2');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('59.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00048s</span></dd> + </dl> +</div> +<div id="div_group_28" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_28" class="passed">oa:TextualBody</dt> + <script type="text/javascript">moveProgressBar('59.9');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('60.2');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_29" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_29" class="passed">oa:TimeState</dt> + <script type="text/javascript">moveProgressBar('60.5');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('60.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00049s</span></dd> + </dl> +</div> +<div id="div_group_30" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_30" class="passed">oa:XPathSelector</dt> + <script type="text/javascript">moveProgressBar('61.2');</script> + <dd class="example passed"><span class="passed_spec_name">subClassOf</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('61.5');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentClass</span><span class='duration'>0.00048s</span></dd> + </dl> +</div> +<div id="div_group_31" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_31" class="passed">oa:annotationService</dt> + <script type="text/javascript">moveProgressBar('61.9');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('62.2');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('62.5');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('62.9');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_32" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_32" class="passed">oa:bodyValue</dt> + <script type="text/javascript">moveProgressBar('63.2');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('63.5');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('63.9');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00083s</span></dd> + <script type="text/javascript">moveProgressBar('64.2');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00015s</span></dd> + </dl> +</div> +<div id="div_group_33" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_33" class="passed">oa:cachedSource</dt> + <script type="text/javascript">moveProgressBar('64.5');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('64.9');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('65.2');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('65.5');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_34" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_34" class="passed">oa:canonical</dt> + <script type="text/javascript">moveProgressBar('65.8');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('66.2');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('66.5');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('66.8');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_35" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_35" class="passed">oa:end</dt> + <script type="text/javascript">moveProgressBar('67.2');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('67.5');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('67.8');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00085s</span></dd> + <script type="text/javascript">moveProgressBar('68.2');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_36" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_36" class="passed">oa:exact</dt> + <script type="text/javascript">moveProgressBar('68.5');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('68.8');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('69.2');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00092s</span></dd> + <script type="text/javascript">moveProgressBar('69.5');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_37" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_37" class="passed">oa:hasBody</dt> + <script type="text/javascript">moveProgressBar('69.8');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('70.1');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00090s</span></dd> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('70.8');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_38" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_38" class="passed">oa:hasEndSelector</dt> + <script type="text/javascript">moveProgressBar('71.1');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('71.5');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('71.8');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('72.1');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_39" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_39" class="passed">oa:hasPurpose</dt> + <script type="text/javascript">moveProgressBar('72.5');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('72.8');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('73.1');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('73.5');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_40" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_40" class="passed">oa:hasScope</dt> + <script type="text/javascript">moveProgressBar('73.8');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('74.1');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('74.5');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('74.8');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00011s</span></dd> + </dl> +</div> +<div id="div_group_41" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_41" class="passed">oa:hasSelector</dt> + <script type="text/javascript">moveProgressBar('75.1');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('75.4');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('75.8');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('76.1');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_42" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_42" class="passed">oa:hasSource</dt> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('76.8');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('77.1');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('77.4');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_43" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_43" class="passed">oa:hasStartSelector</dt> + <script type="text/javascript">moveProgressBar('77.8');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('78.1');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('78.4');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('78.8');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_44" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_44" class="passed">oa:hasState</dt> + <script type="text/javascript">moveProgressBar('79.1');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('79.4');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('79.8');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('80.1');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_45" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_45" class="passed">oa:hasTarget</dt> + <script type="text/javascript">moveProgressBar('80.4');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('80.7');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('81.1');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('81.4');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_46" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_46" class="passed">oa:motivatedBy</dt> + <script type="text/javascript">moveProgressBar('81.7');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('82.1');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('82.4');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('82.7');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_47" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_47" class="passed">oa:prefix</dt> + <script type="text/javascript">moveProgressBar('83.1');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('83.4');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('83.7');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00082s</span></dd> + <script type="text/javascript">moveProgressBar('84.1');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00014s</span></dd> + </dl> +</div> +<div id="div_group_48" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_48" class="passed">oa:processingLanguage</dt> + <script type="text/javascript">moveProgressBar('84.4');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('84.7');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00012s</span></dd> + <script type="text/javascript">moveProgressBar('85.0');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00085s</span></dd> + <script type="text/javascript">moveProgressBar('85.4');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_49" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_49" class="passed">oa:refinedBy</dt> + <script type="text/javascript">moveProgressBar('85.7');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('86.0');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('86.4');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('86.7');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00011s</span></dd> + </dl> +</div> +<div id="div_group_50" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_50" class="passed">oa:renderedVia</dt> + <script type="text/javascript">moveProgressBar('87.0');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('87.4');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('87.7');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00086s</span></dd> + <script type="text/javascript">moveProgressBar('88.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_51" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_51" class="passed">oa:sourceDate</dt> + <script type="text/javascript">moveProgressBar('88.4');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('88.7');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('89.0');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00081s</span></dd> + <script type="text/javascript">moveProgressBar('89.4');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00011s</span></dd> + </dl> +</div> +<div id="div_group_52" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_52" class="passed">oa:sourceDateEnd</dt> + <script type="text/javascript">moveProgressBar('89.7');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('90.0');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00087s</span></dd> + <script type="text/javascript">moveProgressBar('90.3');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00082s</span></dd> + <script type="text/javascript">moveProgressBar('90.7');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00011s</span></dd> + </dl> +</div> +<div id="div_group_53" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_53" class="passed">oa:sourceDateStart</dt> + <script type="text/javascript">moveProgressBar('91.0');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('91.3');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00089s</span></dd> + <script type="text/javascript">moveProgressBar('91.7');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00082s</span></dd> + <script type="text/javascript">moveProgressBar('92.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_54" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_54" class="passed">oa:start</dt> + <script type="text/javascript">moveProgressBar('92.3');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('92.7');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('93.0');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00083s</span></dd> + <script type="text/javascript">moveProgressBar('93.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_55" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_55" class="passed">oa:styleClass</dt> + <script type="text/javascript">moveProgressBar('93.7');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('94.0');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('94.3');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00082s</span></dd> + <script type="text/javascript">moveProgressBar('94.7');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_56" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_56" class="passed">oa:styledBy</dt> + <script type="text/javascript">moveProgressBar('95.0');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('95.3');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00092s</span></dd> + <script type="text/javascript">moveProgressBar('95.6');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('96.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00013s</span></dd> + </dl> +</div> +<div id="div_group_57" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_57" class="passed">oa:suffix</dt> + <script type="text/javascript">moveProgressBar('96.3');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('96.6');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00010s</span></dd> + <script type="text/javascript">moveProgressBar('97.0');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00081s</span></dd> + <script type="text/javascript">moveProgressBar('97.3');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_58" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_58" class="passed">oa:textDirection</dt> + <script type="text/javascript">moveProgressBar('97.6');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('98.0');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('98.3');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00088s</span></dd> + <script type="text/javascript">moveProgressBar('98.6');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00012s</span></dd> + </dl> +</div> +<div id="div_group_59" class="example_group passed"> + <dl style="margin-left: 30px;"> + <dt id="example_group_59" class="passed">oa:via</dt> + <script type="text/javascript">moveProgressBar('99.0');</script> + <dd class="example passed"><span class="passed_spec_name">subPropertyOf</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('99.3');</script> + <dd class="example passed"><span class="passed_spec_name">domain</span><span class='duration'>0.00009s</span></dd> + <script type="text/javascript">moveProgressBar('99.6');</script> + <dd class="example passed"><span class="passed_spec_name">range</span><span class='duration'>0.00011s</span></dd> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="example passed"><span class="passed_spec_name">equivalentProperty</span><span class='duration'>0.00011s</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>52.01192 seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "302 examples, 3 failures, 2 pending";</script> +</div> +</div> +</body> +</html> 
diff --git a/annotation-vocab/tools/ruby-rdf/Rakefile b/annotation-vocab/tools/ruby-rdf/Rakefile new file mode 100644 index 0000000..70b446b --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/Rakefile 
@@ -0,0 +1,11 @@ +require "bundler/setup" + +begin + require 'rspec/core/rake_task' + RSpec::Core::RakeTask.new(:spec) do |t| + t.pattern = "annotation-vocab_spec.rb" + end + + task :default => :spec +rescue LoadError +end \ No newline at end of file 
diff --git a/annotation-vocab/tools/ruby-rdf/annotation-vocab_spec.rb b/annotation-vocab/tools/ruby-rdf/annotation-vocab_spec.rb new file mode 100644 index 0000000..3ae53b2 --- /dev/null +++ b/annotation-vocab/tools/ruby-rdf/annotation-vocab_spec.rb 
@@ -0,0 +1,120 @@ +require "bundler/setup" +require 'rdf' +require 'linkeddata' +require 'rdf/spec/matchers' +require 'rspec' + +SAMPLES = File.expand_path("../../samples/", __FILE__) +CORRECT = Dir.glob(File.join(SAMPLES, "correct/*.json")) +INCORRECT = Dir.glob(File.join(SAMPLES, "incorrect/*.json")) +RDF::Reasoner.apply(:rdfs, :owl) +VOCAB_URI = "http://www.w3.org/ns/oa#" +VOCAB_GRAPH = begin + g = RDF::Graph.load(VOCAB_URI, format: :jsonld, headers: {"Accept" => "application/ld+json"}) + g.each_object {|o| o.squish! if o.literal?} + g +end + +describe "Web Annotation Vocab" do + let(:vocab) {VOCAB_URI} + let(:vocab_graph) {VOCAB_GRAPH} + + # Load Annotation vocabulary first, so that that defined in rdf-vocab is not lazy-loaded + before(:all) do + RDF::Vocabulary.from_graph(VOCAB_GRAPH, url: VOCAB_URI, class_name: RDF::Vocab::OA) + end + + it "The JSON-LD context document can be parsed without errors by JSON-LD validators" do + expect {JSON::LD::API.expand(vocab, validate: true)}.not_to raise_error + end + + context "The JSON-LD context document can be used to convert JSON-LD serialized Annotations into RDF triples" do + CORRECT.each do |file| + it "#{file.split('/').last}" do + nt = file.sub(/.json$/, '.nt') + gjld = RDF::Graph.load(file, format: :jsonld) + gnt = RDF::Graph.load(nt, format: :ntriples) + expect(gjld).to be_equivalent_graph(gnt) + end + + it "lint #{file.split('/').last}" do + gjld = RDF::Graph.load(file, format: :jsonld) + gjld.entail! + expect(gjld.lint).to be_empty + end + end + end + + context "detects errors in incorrect examples" do + INCORRECT.each do |file| + it "#{file.split('/').last}" do + pending "Empty Documents are invalid" if file =~ /anno2.json|anno3.json/ + expect {RDF::Graph.load(file, validate: true, format: :jsonld, logger: false)}.to raise_error(RDF::ReaderError) + end + end + end + + context "The ontology documents can be parsed without errors by RDF Schema validators" do + { + jsonld: "application/ld+json", + rdfxml: "application/rdf+xml", + ttl: "text/turtle", + }.each do |format, content_type| + it "JSON-LD version is isomorphic to #{format}" do + expect do + RDF::Graph.load(vocab, format: format, validate: true, headers: {"Accept" => content_type}) + end.not_to raise_error + end + end + end + + context "The ontology documents are isomorphic to each other" do + { + rdfxml: "application/rdf+xml", + ttl: "text/turtle", + }.each do |format, content_type| + it format do + fg = RDF::Graph.load(vocab, format: format, headers: {"Accept" => content_type}) + + # XXX Normalize whitespace in literals to ease comparision + fg.each_object {|o| o.squish! if o.literal?} + expect(fg).to be_equivalent_graph(vocab_graph) + end + end + end + + context "The ontology is internally consistent with respect to domains, ranges, inverses, and any other ontology features specified." do + it "lints cleanly" do + entailed_graph = vocab_graph.dup.entail! + expect(entailed_graph.lint).to be_empty + end + + RDF::Vocab::OA.each do |term| + if term.type.to_s =~ /Class/ + context term.pname do + it "subClassOf" do + expect {term.subClassOf.map(&:pname)}.not_to raise_error + end + it "equivalentClass" do + expect {term.equivalentClass.map(&:pname)}.not_to raise_error + end + end + elsif term.type.to_s =~ /Property/ + context term.pname do + it "subPropertyOf" do + expect {term.subPropertyOf.map(&:pname)}.not_to raise_error + end + it "domain" do + expect {term.domain.map(&:pname)}.not_to raise_error + end + it "range" do + expect {term.range.map(&:pname)}.not_to raise_error + end + it "equivalentProperty" do + expect {term.equivalentProperty.map(&:pname)}.not_to raise_error + end + end + end + end + end +end 
diff --git a/annotation-vocab/tools/samples/correct/anno1.json b/annotation-vocab/tools/samples/correct/anno1.json new file mode 100644 index 0000000..905349b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno1.json 
@@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno1", + "type": "Annotation", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno1.nt b/annotation-vocab/tools/samples/correct/anno1.nt new file mode 100644 index 0000000..879b3b4 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno1.nt 
@@ -0,0 +1,3 @@ +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/page1> . +<http://example.org/anno1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasBody> <http://example.org/post1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno10.json b/annotation-vocab/tools/samples/correct/anno10.json new file mode 100644 index 0000000..766fddf --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno10.json 
@@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno10", + "type": "Annotation", + "body": { + "type": "Choice", + "items": [ + { + "id": "http://example.org/note1", + "language": "en" + }, + { + "id": "http://example.org/note2", + "language": "fr" + } + ] + }, + "target": "http://example.org/website1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno10.nt b/annotation-vocab/tools/samples/correct/anno10.nt new file mode 100644 index 0000000..0db919d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno10.nt 
@@ -0,0 +1,11 @@ +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/note2> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/note1> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b2 . +<http://example.org/note2> <http://purl.org/dc/elements/1.1/language> "fr" . +_:b0 <http://www.w3.org/ns/activitystreams#items> _:b1 . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Choice> . +<http://example.org/anno10> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/website1> . +<http://example.org/anno10> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno10> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/note1> <http://purl.org/dc/elements/1.1/language> "en" . 
diff --git a/annotation-vocab/tools/samples/correct/anno11.json b/annotation-vocab/tools/samples/correct/anno11.json new file mode 100644 index 0000000..7461493 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno11.json 
@@ -0,0 +1,18 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno11", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "value": "These pages together provide evidence of the conspiracy" + }, + "target": { + "type": "Composite", + "items": [ + "http://example.com/page1", + "http://example.org/page6", + "http://example.net/page4" + ] + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno11.nt b/annotation-vocab/tools/samples/correct/anno11.nt new file mode 100644 index 0000000..cb071e5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno11.nt 
@@ -0,0 +1,14 @@ +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b3 . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/page1> . +<http://example.org/anno11> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno11> <http://www.w3.org/ns/oa#hasTarget> _:b1 . +<http://example.org/anno11> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno11> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.net/page4> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Composite> . +_:b1 <http://www.w3.org/ns/activitystreams#items> _:b2 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/page6> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "These pages together provide evidence of the conspiracy" . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . 
diff --git a/annotation-vocab/tools/samples/correct/anno12.json b/annotation-vocab/tools/samples/correct/anno12.json new file mode 100644 index 0000000..a8039b2 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno12.json 
@@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno12", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "important" + }, + "target": { + "type": "List", + "items": [ + "http://example.com/book/page1", + "http://example.com/book/page2", + "http://example.com/book/page3", + "http://example.com/book/page4" + ] + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno12.nt b/annotation-vocab/tools/samples/correct/anno12.nt new file mode 100644 index 0000000..5890c8b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno12.nt 
@@ -0,0 +1,16 @@ +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "important" . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page4> . +_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +<http://example.org/anno12> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno12> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#tagging> . +<http://example.org/anno12> <http://www.w3.org/ns/oa#hasTarget> _:b1 . +<http://example.org/anno12> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page1> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b3 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page2> . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 . +_:b1 <http://www.w3.org/ns/activitystreams#items> _:b2 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#List> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page3> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b5 . 
diff --git a/annotation-vocab/tools/samples/correct/anno13.json b/annotation-vocab/tools/samples/correct/anno13.json new file mode 100644 index 0000000..8bf6633 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno13.json 
@@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno13", + "type": "Annotation", + "motivation": "classifying", + "body": "http://example.org/vocab/art/portrait", + "target": { + "type": "Independents", + "items": [ + "http://example.com/image1", + "http://example.net/image2", + "http://example.com/image4", + "http://example.org/image9" + ] + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno13.nt b/annotation-vocab/tools/samples/correct/anno13.nt new file mode 100644 index 0000000..e754450 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno13.nt 
@@ -0,0 +1,14 @@ +_:b0 <http://www.w3.org/ns/activitystreams#items> _:b1 . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Independents> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b2 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/image1> . +<http://example.org/anno13> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#classifying> . +<http://example.org/anno13> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno13> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno13> <http://www.w3.org/ns/oa#hasBody> <http://example.org/vocab/art/portrait> . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/image4> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b3 . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.net/image2> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/image9> . 
diff --git a/annotation-vocab/tools/samples/correct/anno14.json b/annotation-vocab/tools/samples/correct/anno14.json new file mode 100644 index 0000000..102225b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno14.json 
@@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno14", + "type": "Annotation", + "creator": "http://example.org/user1", + "created": "2015-01-28T12:00:00Z", + "modified": "2015-01-29T09:00:00Z", + "generator": "http://example.org/client1", + "generated": "2015-02-04T12:00:00Z", + "body": { + "id": "http://example.net/review1", + "creator": "http://example.net/user2", + "created": "2014-06-02T17:00:00Z" + }, + "target": "http://example.com/restaurant1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno14.nt b/annotation-vocab/tools/samples/correct/anno14.nt new file mode 100644 index 0000000..f37cb0d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno14.nt 
@@ -0,0 +1,10 @@ +<http://example.org/anno14> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno14> <http://purl.org/dc/terms/modified> "2015-01-29T09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno14> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +<http://example.org/anno14> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/restaurant1> . +<http://example.org/anno14> <http://purl.org/dc/terms/created> "2015-01-28T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://purl.org/dc/terms/issued> "2015-02-04T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.net/review1> <http://purl.org/dc/terms/creator> <http://example.net/user2> . +<http://example.net/review1> <http://purl.org/dc/terms/created> "2014-06-02T17:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . 
diff --git a/annotation-vocab/tools/samples/correct/anno15.json b/annotation-vocab/tools/samples/correct/anno15.json new file mode 100644 index 0000000..1280eef --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno15.json 
@@ -0,0 +1,20 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno15", + "type": "Annotation", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "My Pseudonym", + "nickname": "pseudo", + "email_sha1": "58bad08927902ff9307b621c54716dcc5083e339" + }, + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/client1/homepage1" + }, + "body": "http://example.net/review1", + "target": "http://example.com/restaurant1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno15.nt b/annotation-vocab/tools/samples/correct/anno15.nt new file mode 100644 index 0000000..2afb3d2 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno15.nt 
@@ -0,0 +1,12 @@ +<http://example.org/user1> <http://xmlns.com/foaf/0.1/nick> "pseudo" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "58bad08927902ff9307b621c54716dcc5083e339" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/name> "My Pseudonym" . +<http://example.org/user1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . +<http://example.org/anno15> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.org/anno15> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/restaurant1> . +<http://example.org/anno15> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno15> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno15> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/name> "Code v2.1" . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/homepage> <http://example.org/client1/homepage1> . +<http://example.org/client1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#Application> . 
diff --git a/annotation-vocab/tools/samples/correct/anno16.json b/annotation-vocab/tools/samples/correct/anno16.json new file mode 100644 index 0000000..f110169 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno16.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno16", + "type": "Annotation", + "audience": { + "id": "http://example.edu/roles/teacher", + "type": "schema:EducationalAudience", + "schema:educationalRole": "teacher" + }, + "body": "http://example.net/classnotes1", + "target": "http://example.com/textbook1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno16.nt b/annotation-vocab/tools/samples/correct/anno16.nt new file mode 100644 index 0000000..b511107 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno16.nt 
@@ -0,0 +1,6 @@ +<http://example.edu/roles/teacher> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/EducationalAudience> . +<http://example.edu/roles/teacher> <http://schema.org/educationalRole> "teacher" . +<http://example.org/anno16> <http://www.w3.org/ns/oa#hasBody> <http://example.net/classnotes1> . +<http://example.org/anno16> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno16> <http://schema.org/audience> <http://example.edu/roles/teacher> . +<http://example.org/anno16> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/textbook1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno17.json b/annotation-vocab/tools/samples/correct/anno17.json new file mode 100644 index 0000000..056b8e4 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno17.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno17", + "type": "Annotation", + "motivation": "commenting", + "body": "http://example.net/comment1", + "target": { + "id": "http://example.com/video1", + "type": "Video", + "accessibility": "captions" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno17.nt b/annotation-vocab/tools/samples/correct/anno17.nt new file mode 100644 index 0000000..ebfceb4 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno17.nt 
@@ -0,0 +1,6 @@ +<http://example.org/anno17> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment1> . +<http://example.org/anno17> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/video1> . +<http://example.org/anno17> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno17> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +<http://example.com/video1> <http://schema.org/accessibilityFeature> "captions" . +<http://example.com/video1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/MovingImage> . 
diff --git a/annotation-vocab/tools/samples/correct/anno18.json b/annotation-vocab/tools/samples/correct/anno18.json new file mode 100644 index 0000000..cdf50fc --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno18.json 
@@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno18", + "type": "Annotation", + "motivation": "bookmarking", + "body": [ + { + "type": "TextualBody", + "value": "readme", + "purpose": "tagging" + }, + { + "type": "TextualBody", + "value": "A good description of the topic that bears further investigation", + "purpose": "describing" + } + ], + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno18.nt b/annotation-vocab/tools/samples/correct/anno18.nt new file mode 100644 index 0000000..2e4e05b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno18.nt 
@@ -0,0 +1,11 @@ +<http://example.org/anno18> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/page1> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#bookmarking> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasBody> _:b1 . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasBody> _:b0 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "A good description of the topic that bears further investigation" . +_:b1 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "readme" . +_:b0 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . 
diff --git a/annotation-vocab/tools/samples/correct/anno19.json b/annotation-vocab/tools/samples/correct/anno19.json new file mode 100644 index 0000000..bd572ce --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno19.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno19", + "type": "Annotation", + "rights": "https://creativecommons.org/publicdomain/zero/1.0/", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by-nc/4.0/" + }, + "target": "http://example.com/product1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno19.nt b/annotation-vocab/tools/samples/correct/anno19.nt new file mode 100644 index 0000000..11fa7ab --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno19.nt 
@@ -0,0 +1,5 @@ +<http://example.net/review1> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by-nc/4.0/> . +<http://example.org/anno19> <http://purl.org/dc/terms/rights> <https://creativecommons.org/publicdomain/zero/1.0/> . +<http://example.org/anno19> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno19> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno19> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/product1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno2.json b/annotation-vocab/tools/samples/correct/anno2.json new file mode 100644 index 0000000..f950f2d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno2.json 
@@ -0,0 +1,17 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno2", + "type": "Annotation", + "body": { + "id": "http://example.org/analysis1.mp3", + "format": "audio/mpeg", + "language": "fr" + }, + "target": { + "id": "http://example.gov/patent1.pdf", + "format": "application/pdf", + "language": ["en", "ar"], + "textDirection": "ltr", + "processingLanguage": "en" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno2.nt b/annotation-vocab/tools/samples/correct/anno2.nt new file mode 100644 index 0000000..b1377ef5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno2.nt 
@@ -0,0 +1,10 @@ +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasTarget> <http://example.gov/patent1.pdf> . +<http://example.org/anno2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasBody> <http://example.org/analysis1.mp3> . +<http://example.org/analysis1.mp3> <http://purl.org/dc/elements/1.1/language> "fr" . +<http://example.org/analysis1.mp3> <http://purl.org/dc/elements/1.1/format> "audio/mpeg" . +<http://example.gov/patent1.pdf> <http://www.w3.org/ns/oa#processingLanguage> "en" . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/language> "ar" . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/language> "en" . +<http://example.gov/patent1.pdf> <http://www.w3.org/ns/oa#textDirection> <http://www.w3.org/ns/oa#ltrDirection> . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/format> "application/pdf" . 
diff --git a/annotation-vocab/tools/samples/correct/anno20.json b/annotation-vocab/tools/samples/correct/anno20.json new file mode 100644 index 0000000..17fcc71 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno20.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno20", + "type": "Annotation", + "canonical": "urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df", + "via": "http://other.example.org/anno1", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by/4.0/" + }, + "target": "http://example.com/product1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno20.nt b/annotation-vocab/tools/samples/correct/anno20.nt new file mode 100644 index 0000000..465f79b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno20.nt 
@@ -0,0 +1,6 @@ +<http://example.net/review1> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by/4.0/> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/product1> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#canonical> <urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df> . +<http://example.org/anno20> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#via> <http://other.example.org/anno1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno21.json b/annotation-vocab/tools/samples/correct/anno21.json new file mode 100644 index 0000000..9ae284d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno21.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno21", + "type": "Annotation", + "body": { + "type": "SpecificResource", + "purpose": "tagging", + "source": "http://example.org/city1" + }, + "target": { + "id": "http://example.org/photo1", + "type": "Image" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno21.nt b/annotation-vocab/tools/samples/correct/anno21.nt new file mode 100644 index 0000000..cc028dc --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno21.nt 
@@ -0,0 +1,7 @@ +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/city1> . +_:b0 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . +<http://example.org/anno21> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno21> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno21> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/photo1> . +<http://example.org/photo1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/StillImage> . 
diff --git a/annotation-vocab/tools/samples/correct/anno22.json b/annotation-vocab/tools/samples/correct/anno22.json new file mode 100644 index 0000000..767080c0 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno22.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno22", + "type": "Annotation", + "body": { + "source": "http://example.org/page1", + "selector": "http://example.org/paraselector1" + }, + "target": { + "source": "http://example.com/dataset1", + "selector": "http://example.org/dataselector1" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno22.nt b/annotation-vocab/tools/samples/correct/anno22.nt new file mode 100644 index 0000000..4a2e4b5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno22.nt 
@@ -0,0 +1,7 @@ +_:b0 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/paraselector1> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +<http://example.org/anno22> <http://www.w3.org/ns/oa#hasTarget> _:b1 . +<http://example.org/anno22> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno22> <http://www.w3.org/ns/oa#hasBody> _:b0 . +_:b1 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/dataselector1> . +_:b1 <http://www.w3.org/ns/oa#hasSource> <http://example.com/dataset1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno23.json b/annotation-vocab/tools/samples/correct/anno23.json new file mode 100644 index 0000000..53b6c676 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno23.json 
@@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno23", + "type": "Annotation", + "body": { + "source": "http://example.org/video1", + "purpose": "describing", + "selector": { + "type": "FragmentSelector", + "conformsTo": "http://www.w3.org/TR/media-frags/", + "value": "t=30,60" + } + }, + "target": "http://example.org/image1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno23.nt b/annotation-vocab/tools/samples/correct/anno23.nt new file mode 100644 index 0000000..9bfe050 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno23.nt 
@@ -0,0 +1,9 @@ +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +_:b1 <http://purl.org/dc/terms/conformsTo> <http://www.w3.org/TR/media-frags/> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "t=30,60" . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b0 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/video1> . +<http://example.org/anno23> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image1> . +<http://example.org/anno23> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno23> <http://www.w3.org/ns/oa#hasBody> _:b0 . 
diff --git a/annotation-vocab/tools/samples/correct/anno24.json b/annotation-vocab/tools/samples/correct/anno24.json new file mode 100644 index 0000000..6cca6cb --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno24.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno24", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "CssSelector", + "value": "#elemid > .elemclass + p" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno24.nt b/annotation-vocab/tools/samples/correct/anno24.nt new file mode 100644 index 0000000..090cad8 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno24.nt 
@@ -0,0 +1,7 @@ +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssSelector> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "#elemid > .elemclass + p" . +<http://example.org/anno24> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno24> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno24> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno25.json b/annotation-vocab/tools/samples/correct/anno25.json new file mode 100644 index 0000000..0e48d3b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno25.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno25", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "XPathSelector", + "value": "/html/body/p[2]/table/tr[2]/td[3]/span" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno25.nt b/annotation-vocab/tools/samples/correct/anno25.nt new file mode 100644 index 0000000..5bd4b28 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno25.nt 
@@ -0,0 +1,7 @@ +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "/html/body/p[2]/table/tr[2]/td[3]/span" . +<http://example.org/anno25> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno25> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno25> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . 
diff --git a/annotation-vocab/tools/samples/correct/anno26.json b/annotation-vocab/tools/samples/correct/anno26.json new file mode 100644 index 0000000..1777fd7 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno26.json 
@@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno26", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "TextQuoteSelector", + "exact": "anotation", + "prefix": "this is an ", + "suffix": " that has some" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno26.nt b/annotation-vocab/tools/samples/correct/anno26.nt new file mode 100644 index 0000000..9ecd431 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno26.nt 
@@ -0,0 +1,9 @@ +_:b1 <http://www.w3.org/ns/oa#prefix> "this is an " . +_:b1 <http://www.w3.org/ns/oa#exact> "anotation" . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextQuoteSelector> . +_:b1 <http://www.w3.org/ns/oa#suffix> " that has some" . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +<http://example.org/anno26> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno26> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno26> <http://www.w3.org/ns/oa#hasTarget> _:b0 . 
diff --git a/annotation-vocab/tools/samples/correct/anno27.json b/annotation-vocab/tools/samples/correct/anno27.json new file mode 100644 index 0000000..4844979 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno27.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno27", + "type": "Annotation", + "body": "http://example.org/review1", + "target": { + "source": "http://example.org/ebook1", + "selector": { + "type": "TextPositionSelector", + "start": 412, + "end": 795 + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno27.nt b/annotation-vocab/tools/samples/correct/anno27.nt new file mode 100644 index 0000000..68df84d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno27.nt 
@@ -0,0 +1,8 @@ +<http://example.org/anno27> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno27> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno27> <http://www.w3.org/ns/oa#hasBody> <http://example.org/review1> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextPositionSelector> . +_:b1 <http://www.w3.org/ns/oa#start> "412"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b1 <http://www.w3.org/ns/oa#end> "795"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/ebook1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno28.json b/annotation-vocab/tools/samples/correct/anno28.json new file mode 100644 index 0000000..2dd1bc7 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno28.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno28", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/diskimg1", + "selector": { + "type": "DataPositionSelector", + "start": 4096, + "end": 4104 + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno28.nt b/annotation-vocab/tools/samples/correct/anno28.nt new file mode 100644 index 0000000..e84bcb2 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno28.nt 
@@ -0,0 +1,8 @@ +_:b1 <http://www.w3.org/ns/oa#end> "4104"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#DataPositionSelector> . +_:b1 <http://www.w3.org/ns/oa#start> "4096"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/diskimg1> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +<http://example.org/anno28> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno28> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno28> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno29.json b/annotation-vocab/tools/samples/correct/anno29.json new file mode 100644 index 0000000..77914ac --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno29.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno29", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "id": "http://example.org/svg1", + "type": "SvgSelector" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno29.nt b/annotation-vocab/tools/samples/correct/anno29.nt new file mode 100644 index 0000000..79178d3 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno29.nt 
@@ -0,0 +1,6 @@ +<http://example.org/svg1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SvgSelector> . +<http://example.org/anno29> <http://www.w3.org/ns/oa#hasBody> <http://example.org/road1> . +<http://example.org/anno29> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/map1> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/svg1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno3.json b/annotation-vocab/tools/samples/correct/anno3.json new file mode 100644 index 0000000..548825c --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno3.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno3", + "type": "Annotation", + "body": { + "id": "http://example.org/video1", + "type": "Video" + }, + "target": { + "id": "http://example.org/website1", + "type": "Text" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno3.nt b/annotation-vocab/tools/samples/correct/anno3.nt new file mode 100644 index 0000000..87a7767 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno3.nt 
@@ -0,0 +1,5 @@ +<http://example.org/website1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/Text> . +<http://example.org/video1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/MovingImage> . +<http://example.org/anno3> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/website1> . +<http://example.org/anno3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno3> <http://www.w3.org/ns/oa#hasBody> <http://example.org/video1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno30.json b/annotation-vocab/tools/samples/correct/anno30.json new file mode 100644 index 0000000..1a7619a --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno30.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno30", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "type": "SvgSelector", + "value": "<svg:svg> ... </svg:svg>" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno30.nt b/annotation-vocab/tools/samples/correct/anno30.nt new file mode 100644 index 0000000..7889db4 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno30.nt 
@@ -0,0 +1,7 @@ +<http://example.org/anno30> <http://www.w3.org/ns/oa#hasBody> <http://example.org/road1> . +<http://example.org/anno30> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno30> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/map1> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "<svg:svg> ... </svg:svg>" . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SvgSelector> . 
diff --git a/annotation-vocab/tools/samples/correct/anno31.json b/annotation-vocab/tools/samples/correct/anno31.json new file mode 100644 index 0000000..ee6902c --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno31.json 
@@ -0,0 +1,20 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno31", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "RangeSelector", + "startSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[2]" + }, + "endSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[4]" + } + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno31.nt b/annotation-vocab/tools/samples/correct/anno31.nt new file mode 100644 index 0000000..efb8e99 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno31.nt 
@@ -0,0 +1,12 @@ +_:b1 <http://www.w3.org/ns/oa#hasEndSelector> _:b3 . +_:b1 <http://www.w3.org/ns/oa#hasStartSelector> _:b2 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#RangeSelector> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "//table[1]/tr[1]/td[4]" . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . +<http://example.org/anno31> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno31> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno31> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "//table[1]/tr[1]/td[2]" . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . 
diff --git a/annotation-vocab/tools/samples/correct/anno32.json b/annotation-vocab/tools/samples/correct/anno32.json new file mode 100644 index 0000000..f7c189c --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno32.json 
@@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno32", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "FragmentSelector", + "value": "para5", + "refinedBy": { + "type": "TextQuoteSelector", + "exact": "Selected Text", + "prefix": "text before the ", + "suffix": " and text after it" + } + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno32.nt b/annotation-vocab/tools/samples/correct/anno32.nt new file mode 100644 index 0000000..7ffcc14 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno32.nt 
@@ -0,0 +1,12 @@ +<http://example.org/anno32> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno32> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno32> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> _:b1 . +_:b2 <http://www.w3.org/ns/oa#suffix> " and text after it" . +_:b2 <http://www.w3.org/ns/oa#prefix> "text before the " . +_:b2 <http://www.w3.org/ns/oa#exact> "Selected Text" . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextQuoteSelector> . +_:b1 <http://www.w3.org/ns/oa#refinedBy> _:b2 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "para5" . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . 
diff --git a/annotation-vocab/tools/samples/correct/anno33.json b/annotation-vocab/tools/samples/correct/anno33.json new file mode 100644 index 0000000..f2866ee --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno33.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno33", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "id": "http://example.org/state1" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno33.nt b/annotation-vocab/tools/samples/correct/anno33.nt new file mode 100644 index 0000000..cc71ce3 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno33.nt 
@@ -0,0 +1,5 @@ +_:b0 <http://www.w3.org/ns/oa#hasState> <http://example.org/state1> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +<http://example.org/anno33> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno33> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +<http://example.org/anno33> <http://www.w3.org/ns/oa#hasTarget> _:b0 . 
diff --git a/annotation-vocab/tools/samples/correct/anno34.json b/annotation-vocab/tools/samples/correct/anno34.json new file mode 100644 index 0000000..c3df38c --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno34.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno34", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "type": "TimeState", + "cached": "http://archive.example.org/copy1", + "sourceDate": "2015-07-20T13:30:00Z" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno34.nt b/annotation-vocab/tools/samples/correct/anno34.nt new file mode 100644 index 0000000..040a1c7 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno34.nt 
@@ -0,0 +1,8 @@ +<http://example.org/anno34> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno34> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno34> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +_:b0 <http://www.w3.org/ns/oa#hasState> _:b1 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b1 <http://www.w3.org/ns/oa#sourceDate> "2015-07-20T13:30:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +_:b1 <http://www.w3.org/ns/oa#cachedSource> <http://archive.example.org/copy1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno35.json b/annotation-vocab/tools/samples/correct/anno35.json new file mode 100644 index 0000000..39050ab --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno35.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno35", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "source": "http://example.org/resource1", + "state": { + "type": "HttpRequestState", + "value": "Accept: application/pdf" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno35.nt b/annotation-vocab/tools/samples/correct/anno35.nt new file mode 100644 index 0000000..9d52852 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno35.nt 
@@ -0,0 +1,7 @@ +_:b0 <http://www.w3.org/ns/oa#hasState> _:b1 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/resource1> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/pdf" . +<http://example.org/anno35> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno35> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno35> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno36.json b/annotation-vocab/tools/samples/correct/anno36.json new file mode 100644 index 0000000..77581ef --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno36.json 
@@ -0,0 +1,22 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno36", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/ebook1", + "state": { + "type": "TimeState", + "sourceDate": "2016-02-01T12:05:23Z", + "refinedBy": { + "type": "HttpRequestState", + "value": "Accept: application/pdf", + "refinedBy": { + "type": "FragmentSelector", + "value": "page=10", + "conformsTo": "http://tools.ietf.org/rfc/rfc3778" + } + } + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno36.nt b/annotation-vocab/tools/samples/correct/anno36.nt new file mode 100644 index 0000000..aa27b88 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno36.nt 
@@ -0,0 +1,14 @@ +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/pdf" . +_:b2 <http://www.w3.org/ns/oa#refinedBy> _:b3 . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/ebook1> . +_:b0 <http://www.w3.org/ns/oa#hasState> _:b1 . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "page=10" . +_:b3 <http://purl.org/dc/terms/conformsTo> <http://tools.ietf.org/rfc/rfc3778> . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +_:b1 <http://www.w3.org/ns/oa#sourceDate> "2016-02-01T12:05:23Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +_:b1 <http://www.w3.org/ns/oa#refinedBy> _:b2 . +<http://example.org/anno36> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno36> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno36> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . 
diff --git a/annotation-vocab/tools/samples/correct/anno37.json b/annotation-vocab/tools/samples/correct/anno37.json new file mode 100644 index 0000000..96796db --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno37.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno37", + "type": "Annotation", + "stylesheet": "http://example.org/style1", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/document1", + "styleClass": "red" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno37.nt b/annotation-vocab/tools/samples/correct/anno37.nt new file mode 100644 index 0000000..6b03f75 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno37.nt 
@@ -0,0 +1,6 @@ +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/document1> . +_:b0 <http://www.w3.org/ns/oa#styleClass> "red" . +<http://example.org/anno37> <http://www.w3.org/ns/oa#styledBy> <http://example.org/style1> . +<http://example.org/anno37> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno37> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno37> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . 
diff --git a/annotation-vocab/tools/samples/correct/anno38.json b/annotation-vocab/tools/samples/correct/anno38.json new file mode 100644 index 0000000..67f24b8 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno38.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno38", + "type": "Annotation", + "stylesheet": { + "type": "CssStylesheet", + "value": ".red { color: red }" + }, + "body": "http://example.org/body1", + "target": { + "source": "http://example.org/target1", + "styleClass": "red" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno38.nt b/annotation-vocab/tools/samples/correct/anno38.nt new file mode 100644 index 0000000..0a05adb --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno38.nt 
@@ -0,0 +1,8 @@ +_:b1 <http://www.w3.org/ns/oa#styleClass> "red" . +_:b1 <http://www.w3.org/ns/oa#hasSource> <http://example.org/target1> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssStyle> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> ".red { color: red }" . +<http://example.org/anno38> <http://www.w3.org/ns/oa#styledBy> _:b0 . +<http://example.org/anno38> <http://www.w3.org/ns/oa#hasBody> <http://example.org/body1> . +<http://example.org/anno38> <http://www.w3.org/ns/oa#hasTarget> _:b1 . +<http://example.org/anno38> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . 
diff --git a/annotation-vocab/tools/samples/correct/anno39.json b/annotation-vocab/tools/samples/correct/anno39.json new file mode 100644 index 0000000..27e639c --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno39.json 
@@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno39", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.edu/article.pdf", + "selector": "http://example.org/selectors/html-selector1", + "renderedVia": { + "id": "http://example.com/pdf-to-html-library", + "type": "Software", + "schema:softwareVersion": "2.5" + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno39.nt b/annotation-vocab/tools/samples/correct/anno39.nt new file mode 100644 index 0000000..8905e96 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno39.nt 
@@ -0,0 +1,8 @@ +<http://example.org/anno39> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno39> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno39> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.com/pdf-to-html-library> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#Application> . +<http://example.com/pdf-to-html-library> <http://schema.org/softwareVersion> "2.5" . +_:b0 <http://www.w3.org/ns/oa#renderedVia> <http://example.com/pdf-to-html-library> . +_:b0 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/selectors/html-selector1> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.edu/article.pdf> . 
diff --git a/annotation-vocab/tools/samples/correct/anno4.json b/annotation-vocab/tools/samples/correct/anno4.json new file mode 100644 index 0000000..5655fb3 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno4.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno4.nt b/annotation-vocab/tools/samples/correct/anno4.nt new file mode 100644 index 0000000..32f8137 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno4.nt 
@@ -0,0 +1,5 @@ +<http://example.org/anno4> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . +<http://example.org/anno4> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/image1#xywh=100,100,300,300> . +<http://example.org/anno4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.com/image1#xywh=100,100,300,300> <http://purl.org/dc/elements/1.1/format> "image/jpeg" . +<http://example.com/image1#xywh=100,100,300,300> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/StillImage> . 
diff --git a/annotation-vocab/tools/samples/correct/anno40.json b/annotation-vocab/tools/samples/correct/anno40.json new file mode 100644 index 0000000..63b47f1 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno40.json 
@@ -0,0 +1,10 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno40", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/image1", + "scope": "http://example.org/page1" + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno40.nt b/annotation-vocab/tools/samples/correct/anno40.nt new file mode 100644 index 0000000..6afaad5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno40.nt 
@@ -0,0 +1,5 @@ +<http://example.org/anno40> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno40> <http://www.w3.org/ns/oa#hasTarget> _:b0 . +<http://example.org/anno40> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +_:b0 <http://www.w3.org/ns/oa#hasSource> <http://example.org/image1> . +_:b0 <http://www.w3.org/ns/oa#hasScope> <http://example.org/page1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno41-example44.json b/annotation-vocab/tools/samples/correct/anno41-example44.json new file mode 100644 index 0000000..80afc74 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno41-example44.json 
@@ -0,0 +1,82 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno41", + "type": "Annotation", + "motivation": "commenting", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "A. Person", + "nickname": "user1" + }, + "created": "2015-10-13T13:00:00Z", + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/homepage1" + }, + "generated": "2015-10-14T15:13:28Z", + "stylesheet": { + "id": "http://example.org/stylesheet1", + "type": "CssStylesheet" + }, + "body": [ + { + "type": "TextualBody", + "purpose": "tagging", + "value": "love" + }, + { + "type": "Choice", + "items": [ + { + "type": "TextualBody", + "purpose": "describing", + "value": "I really love this particular bit of text in this XML. No really.", + "format": "text/plain", + "language": "en", + "creator": "http://example.org/user1" + }, + { + "type": "SpecificResource", + "purpose": "describing", + "source": { + "id": "http://example.org/comment1", + "type": "Audio", + "format": "audio/mpeg", + "language": "de", + "creator": { + "id": "http://example.org/user2", + "type": "Person" + } + } + } + ] + } + ], + "target": { + "type": "SpecificResource", + "styleClass": "mystyle", + "source": "http://example.com/document1", + "state": [ + { + "type": "HttpRequestState", + "value": "Accept: application/xml", + "refinedBy": { + "type": "TimeState", + "sourceDate": "2015-09-25T12:00:00Z" + } + } + ], + "selector": { + "type": "FragmentSelector", + "value": "xpointer(/doc/body/section[2]/para[1])", + "refinedBy": { + "type": "TextPositionSelector", + "start": 6, + "end": 27 + } + } + } +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno41-example44.nt b/annotation-vocab/tools/samples/correct/anno41-example44.nt new file mode 100644 index 0000000..5d5122e --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno41-example44.nt 
@@ -0,0 +1,56 @@ +<http://example.org/user1> <http://xmlns.com/foaf/0.1/nick> "user1" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/name> "A. Person" . +<http://example.org/user1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . +_:b10 <http://www.w3.org/ns/oa#start> "6"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b10 <http://www.w3.org/ns/oa#end> "27"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b10 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextPositionSelector> . +<http://example.org/stylesheet1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssStyle> . +<http://example.org/comment1> <http://purl.org/dc/elements/1.1/language> "de" . +<http://example.org/comment1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/Sound> . +<http://example.org/comment1> <http://purl.org/dc/terms/creator> <http://example.org/user2> . +<http://example.org/comment1> <http://purl.org/dc/elements/1.1/format> "audio/mpeg" . +_:b7 <http://www.w3.org/ns/oa#refinedBy> _:b8 . +_:b7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/xml" . +_:b3 <http://purl.org/dc/elements/1.1/language> "en" . +_:b3 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b3 <http://purl.org/dc/terms/creator> <http://example.org/user1> . +_:b3 <http://purl.org/dc/elements/1.1/format> "text/plain" . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "I really love this particular bit of text in this XML. No really." . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b3 . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Choice> . +_:b1 <http://www.w3.org/ns/activitystreams#items> _:b2 . +_:b5 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b5 <http://www.w3.org/ns/oa#hasSource> <http://example.org/comment1> . +_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +<http://example.org/anno41> <http://purl.org/dc/terms/created> "2015-10-13T13:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasBody> _:b1 . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno41> <http://www.w3.org/ns/oa#styledBy> <http://example.org/stylesheet1> . +<http://example.org/anno41> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno41> <http://purl.org/dc/terms/issued> "2015-10-14T15:13:28Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno41> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +<http://example.org/anno41> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasTarget> _:b6 . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b5 . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b9 <http://www.w3.org/ns/oa#refinedBy> _:b10 . +_:b9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +_:b9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "xpointer(/doc/body/section[2]/para[1])" . +_:b0 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "love" . +<http://example.org/user2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/name> "Code v2.1" . +<http://example.org/client1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#Application> . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/homepage> <http://example.org/homepage1> . +_:b8 <http://www.w3.org/ns/oa#sourceDate> "2015-09-25T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +_:b6 <http://www.w3.org/ns/oa#styleClass> "mystyle" . +_:b6 <http://www.w3.org/ns/oa#hasSelector> _:b9 . +_:b6 <http://www.w3.org/ns/oa#hasSource> <http://example.com/document1> . +_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +_:b6 <http://www.w3.org/ns/oa#hasState> _:b7 . 
diff --git a/annotation-vocab/tools/samples/correct/anno5.json b/annotation-vocab/tools/samples/correct/anno5.json new file mode 100644 index 0000000..85532e8 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno5.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno5", + "type":"Annotation", + "body": { + "type" : "TextualBody", + "value" : "<p>j'adore !</p>", + "format" : "text/html", + "language" : "fr" + }, + "target": "http://example.org/photo1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno5.nt b/annotation-vocab/tools/samples/correct/anno5.nt new file mode 100644 index 0000000..cb0359f --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno5.nt 
@@ -0,0 +1,7 @@ +<http://example.org/anno5> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno5> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno5> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/photo1> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b0 <http://purl.org/dc/elements/1.1/format> "text/html" . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "<p>j'adore !</p>" . +_:b0 <http://purl.org/dc/elements/1.1/language> "fr" . 
diff --git a/annotation-vocab/tools/samples/correct/anno6.json b/annotation-vocab/tools/samples/correct/anno6.json new file mode 100644 index 0000000..9ae0d88 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno6.json 
@@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno6", + "type":"Annotation", + "bodyValue": "Comment text", + "target": "http://example.org/target1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno6.nt b/annotation-vocab/tools/samples/correct/anno6.nt new file mode 100644 index 0000000..4d99f2a --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno6.nt 
@@ -0,0 +1,3 @@ +<http://example.org/anno6> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/target1> . +<http://example.org/anno6> <http://www.w3.org/ns/oa#bodyValue> "Comment text" . +<http://example.org/anno6> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . 
diff --git a/annotation-vocab/tools/samples/correct/anno7.json b/annotation-vocab/tools/samples/correct/anno7.json new file mode 100644 index 0000000..9f821d2 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno7.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno7", + "type":"Annotation", + "body": { + "type": "TextualBody", + "value": "Comment text", + "format": "text/plain" + }, + "target": "http://example.org/target1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno7.nt b/annotation-vocab/tools/samples/correct/anno7.nt new file mode 100644 index 0000000..79707fa --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno7.nt 
@@ -0,0 +1,6 @@ +<http://example.org/anno7> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/target1> . +<http://example.org/anno7> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno7> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Comment text" . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b0 <http://purl.org/dc/elements/1.1/format> "text/plain" . 
diff --git a/annotation-vocab/tools/samples/correct/anno8.json b/annotation-vocab/tools/samples/correct/anno8.json new file mode 100644 index 0000000..3187af6 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno8.json 
@@ -0,0 +1,6 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno8", + "type": "Annotation", + "target": "http://example.org/ebook1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno8.nt b/annotation-vocab/tools/samples/correct/anno8.nt new file mode 100644 index 0000000..7218823 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno8.nt 
@@ -0,0 +1,2 @@ +<http://example.org/anno8> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno8> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/ebook1> . 
diff --git a/annotation-vocab/tools/samples/correct/anno9.json b/annotation-vocab/tools/samples/correct/anno9.json new file mode 100644 index 0000000..8d72da3 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno9.json 
@@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno9", + "type": "Annotation", + "body": [ + "http://example.org/description1", + { + "type": "TextualBody", + "value": "tag1" + } + ], + "target": [ + "http://example.org/image1", + "http://example.org/image2" + ] +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/anno9.nt b/annotation-vocab/tools/samples/correct/anno9.nt new file mode 100644 index 0000000..16f5832 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/anno9.nt 
@@ -0,0 +1,7 @@ +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "tag1" . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasBody> _:b0 . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image2> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image1> . +<http://example.org/anno9> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . 
diff --git a/annotation-vocab/tools/samples/correct/collection1.json b/annotation-vocab/tools/samples/correct/collection1.json new file mode 100644 index 0000000..e3a5d80 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/collection1.json 
@@ -0,0 +1,618 @@ + +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/collection1", + "type": "AnnotationCollection", + "creator": "http://www.w3.org/", + "label": "Annotation Examples", + "total": 41, + "first": { + "id": "http://example.org/collection1/page1", + "type": "AnnotationPage", + "startIndex": 0, + "items": [ + { + "id": "http://example.org/anno1", + "type": "Annotation", + "body": "http://example.org/post1", + "target": "http://example.com/page1" + }, + { + "id": "http://example.org/anno2", + "type": "Annotation", + "body": { + "id": "http://example.org/analysis1.mp3", + "format": "audio/mpeg", + "language": "fr" + }, + "target": { + "id": "http://example.gov/patent1.pdf", + "format": "application/pdf", + "language": ["en", "ar"], + "textDirection": "ltr", + "processingLanguage": "en" + } + }, + { + "id": "http://example.org/anno3", + "type": "Annotation", + "body": { + "id": "http://example.org/video1", + "type": "Video" + }, + "target": { + "id": "http://example.org/website1", + "type": "Text" + } + }, + { + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } + }, + { + "id": "http://example.org/anno5", + "type":"Annotation", + "body": { + "type" : "TextualBody", + "value" : "<p>j'adore !</p>", + "format" : "text/html", + "language" : "fr" + }, + "target": "http://example.org/photo1" + }, + { + "id": "http://example.org/anno6", + "type":"Annotation", + "bodyValue": "Comment text", + "target": "http://example.org/target1" + }, + { + "id": "http://example.org/anno7", + "type":"Annotation", + "body": { + "type": "TextualBody", + "value": "Comment text", + "format": "text/plain" + }, + "target": "http://example.org/target1" + }, + { + "id": "http://example.org/anno8", + "type": "Annotation", + "target": "http://example.org/ebook1" + }, + { + "id": "http://example.org/anno9", + "type": "Annotation", + "body": [ + "http://example.org/description1", + { + "type": "TextualBody", + "value": "tag1" + } + ], + "target": [ + "http://example.org/image1", + "http://example.org/image2" + ] + }, + { + "id": "http://example.org/anno10", + "type": "Annotation", + "body": { + "type": "Choice", + "items": [ + { + "id": "http://example.org/note1", + "language": "en" + }, + { + "id": "http://example.org/note2", + "language": "fr" + } + ] + }, + "target": "http://example.org/website1" + }, + { + "id": "http://example.org/anno11", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "value": "These pages together provide evidence of the conspiracy" + }, + "target": { + "type": "Composite", + "items": [ + "http://example.com/page1", + "http://example.org/page6", + "http://example.net/page4" + ] + } + }, + { + "id": "http://example.org/anno12", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "important" + }, + "target": { + "type": "List", + "items": [ + "http://example.com/book/page1", + "http://example.com/book/page2", + "http://example.com/book/page3", + "http://example.com/book/page4" + ] + } + }, + { + "id": "http://example.org/anno13", + "type": "Annotation", + "motivation": "classifying", + "body": "http://example.org/vocab/art/portrait", + "target": { + "type": "Independents", + "items": [ + "http://example.com/image1", + "http://example.net/image2", + "http://example.com/image4", + "http://example.org/image9" + ] + } + }, + { + "id": "http://example.org/anno14", + "type": "Annotation", + "creator": "http://example.org/user1", + "created": "2015-01-28T12:00:00Z", + "modified": "2015-01-29T09:00:00Z", + "generator": "http://example.org/client1", + "generated": "2015-02-04T12:00:00Z", + "body": { + "id": "http://example.net/review1", + "creator": "http://example.net/user2", + "created": "2014-06-02T17:00:00Z" + }, + "target": "http://example.com/restaurant1" + }, + { + "id": "http://example.org/anno15", + "type": "Annotation", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "My Pseudonym", + "nickname": "pseudo", + "email_sha1": "58bad08927902ff9307b621c54716dcc5083e339" + }, + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/client1/homepage1" + }, + "body": "http://example.net/review1", + "target": "http://example.com/restaurant1" + }, + { + "id": "http://example.org/anno16", + "type": "Annotation", + "audience": { + "id": "http://example.edu/roles/teacher", + "type": "schema:EducationalAudience", + "schema:educationalRole": "teacher" + }, + "body": "http://example.net/classnotes1", + "target": "http://example.com/textbook1" + }, + { + "id": "http://example.org/anno17", + "type": "Annotation", + "motivation": "commenting", + "body": "http://example.net/comment1", + "target": { + "id": "http://example.com/video1", + "type": "Video", + "accessibility": "captions" + } + }, + { + "id": "http://example.org/anno18", + "type": "Annotation", + "motivation": "bookmarking", + "body": [ + { + "type": "TextualBody", + "value": "readme", + "purpose": "tagging" + }, + { + "type": "TextualBody", + "value": "A good description of the topic that bears further investigation", + "purpose": "describing" + } + ], + "target": "http://example.com/page1" + }, + { + "id": "http://example.org/anno19", + "type": "Annotation", + "rights": "https://creativecommons.org/publicdomain/zero/1.0/", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by-nc/4.0/" + }, + "target": "http://example.com/product1" + }, + { + "id": "http://example.org/anno20", + "type": "Annotation", + "canonical": "urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df", + "via": "http://other.example.org/anno1", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by/4.0/" + }, + "target": "http://example.com/product1" + }, + { + "id": "http://example.org/anno21", + "type": "Annotation", + "body": { + "type": "SpecificResource", + "purpose": "tagging", + "source": "http://example.org/city1" + }, + "target": { + "id": "http://example.org/photo1", + "type": "Image" + } + }, + { + "id": "http://example.org/anno22", + "type": "Annotation", + "body": { + "source": "http://example.org/page1", + "selector": "http://example.org/paraselector1" + }, + "target": { + "source": "http://example.com/dataset1", + "selector": "http://example.org/dataselector1" + } + }, + { + "id": "http://example.org/anno23", + "type": "Annotation", + "body": { + "source": "http://example.org/video1", + "purpose": "describing", + "selector": { + "type": "FragmentSelector", + "conformsTo": "http://www.w3.org/TR/media-frags/", + "value": "t=30,60" + } + }, + "target": "http://example.org/image1" + }, + { + "id": "http://example.org/anno24", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "CssSelector", + "value": "#elemid > .elemclass + p" + } + } + }, + { + "id": "http://example.org/anno25", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "XPathSelector", + "value": "/html/body/p[2]/table/tr[2]/td[3]/span" + } + } + }, + { + "id": "http://example.org/anno26", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "TextQuoteSelector", + "exact": "anotation", + "prefix": "this is an ", + "suffix": " that has some" + } + } + }, + { + "id": "http://example.org/anno27", + "type": "Annotation", + "body": "http://example.org/review1", + "target": { + "source": "http://example.org/ebook1", + "selector": { + "type": "TextPositionSelector", + "start": 412, + "end": 795 + } + } + }, + { + "id": "http://example.org/anno28", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/diskimg1", + "selector": { + "type": "DataPositionSelector", + "start": 4096, + "end": 4104 + } + } + }, + { + "id": "http://example.org/anno29", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "id": "http://example.org/svg1", + "type": "SvgSelector" + } + } + }, + { + "id": "http://example.org/anno30", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "type": "SvgSelector", + "value": "<svg:svg> ... </svg:svg>" + } + } + }, + { + "id": "http://example.org/anno31", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "RangeSelector", + "startSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[2]" + }, + "endSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[4]" + } + } + } + }, + { + "id": "http://example.org/anno32", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "FragmentSelector", + "value": "para5", + "refinedBy": { + "type": "TextQuoteSelector", + "exact": "Selected Text", + "prefix": "text before the ", + "suffix": " and text after it" + } + } + } + }, + { + "id": "http://example.org/anno33", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "id": "http://example.org/state1" + } + } + }, + { + "id": "http://example.org/anno34", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "type": "TimeState", + "cached": "http://archive.example.org/copy1", + "sourceDate": "2015-07-20T13:30:00Z" + } + } + }, + { + "id": "http://example.org/anno35", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "source": "http://example.org/resource1", + "state": { + "type": "HttpRequestState", + "value": "Accept: application/pdf" + } + } + }, + { + "id": "http://example.org/anno36", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/ebook1", + "state": { + "type": "TimeState", + "sourceDate": "2016-02-01T12:05:23Z", + "refinedBy": { + "type": "HttpRequestState", + "value": "Accept: application/pdf", + "refinedBy": { + "type": "FragmentSelector", + "value": "page=10", + "conformsTo": "http://tools.ietf.org/rfc/rfc3778" + } + } + } + } + }, + { + "id": "http://example.org/anno37", + "type": "Annotation", + "stylesheet": "http://example.org/style1", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/document1", + "styleClass": "red" + } + }, + { + "id": "http://example.org/anno38", + "type": "Annotation", + "stylesheet": { + "type": "CssStylesheet", + "value": ".red { color: red }" + }, + "body": "http://example.org/body1", + "target": { + "source": "http://example.org/target1", + "styleClass": "red" + } + }, + { + "id": "http://example.org/anno39", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.edu/article.pdf", + "selector": "http://example.org/selectors/html-selector1", + "renderedVia": { + "id": "http://example.com/pdf-to-html-library", + "type": "Software", + "schema:softwareVersion": "2.5" + } + } + }, + { + "id": "http://example.org/anno40", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/image1", + "scope": "http://example.org/page1" + } + }, + { + "id": "http://example.org/anno41", + "type": "Annotation", + "motivation": "commenting", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "A. Person", + "nickname": "user1" + }, + "created": "2015-10-13T13:00:00Z", + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/homepage1" + }, + "generated": "2015-10-14T15:13:28Z", + "stylesheet": { + "id": "http://example.org/stylesheet1", + "type": "CssStylesheet" + }, + "body": [ + { + "type": "TextualBody", + "purpose": "tagging", + "value": "love" + }, + { + "type": "Choice", + "items": [ + { + "type": "TextualBody", + "purpose": "describing", + "value": "I really love this particular bit of text in this XML. No really.", + "format": "text/plain", + "language": "en", + "creator": "http://example.org/user1" + }, + { + "type": "SpecificResource", + "purpose": "describing", + "source": { + "id": "http://example.org/comment1", + "type": "Audio", + "format": "audio/mpeg", + "language": "de", + "creator": { + "id": "http://example.org/user2", + "type": "Person" + } + } + } + ] + } + ], + "target": { + "type": "SpecificResource", + "styleClass": "mystyle", + "source": "http://example.com/document1", + "state": [ + { + "type": "HttpRequestState", + "value": "Accept: application/xml", + "refinedBy": { + "type": "TimeState", + "sourceDate": "2015-09-25T12:00:00Z" + } + } + ], + "selector": { + "type": "FragmentSelector", + "value": "xpointer(/doc/body/section[2]/para[1])", + "refinedBy": { + "type": "TextPositionSelector", + "start": 6, + "end": 27 + } + } + } + } + ] + } +} 
diff --git a/annotation-vocab/tools/samples/correct/collection1.nt b/annotation-vocab/tools/samples/correct/collection1.nt new file mode 100644 index 0000000..4aa2fc2 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/collection1.nt 
@@ -0,0 +1,462 @@ +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno4> . +_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 . +<http://example.org/anno11> <http://www.w3.org/ns/oa#hasTarget> _:b18 . +<http://example.org/anno11> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +<http://example.org/anno11> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno11> <http://www.w3.org/ns/oa#hasBody> _:b17 . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno5> . +_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b6 . +_:b37 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno16> . +_:b37 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b38 . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/page1> . +<http://example.org/anno1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasBody> <http://example.org/post1> . +_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno6> . +_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b7 . +_:b15 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/note2> . +_:b15 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno2> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b2 . +_:b17 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "These pages together provide evidence of the conspiracy" . +_:b17 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b35 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno14> . +_:b35 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b36 . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image2> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image1> . +<http://example.org/anno9> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . +<http://example.org/anno9> <http://www.w3.org/ns/oa#hasBody> _:b11 . +<http://example.org/anno13> <http://www.w3.org/ns/oa#hasTarget> _:b30 . +<http://example.org/anno13> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#classifying> . +<http://example.org/anno13> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno13> <http://www.w3.org/ns/oa#hasBody> <http://example.org/vocab/art/portrait> . +_:b23 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "important" . +_:b23 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +<http://example.org/anno7> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/target1> . +<http://example.org/anno7> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno7> <http://www.w3.org/ns/oa#hasBody> _:b8 . +<http://example.org/anno3> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/website1> . +<http://example.org/anno3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno3> <http://www.w3.org/ns/oa#hasBody> <http://example.org/video1> . +_:b31 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/image1> . +_:b31 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b32 . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno3> . +_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b3 . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/homepage> <http://example.org/client1/homepage1> . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/homepage> <http://example.org/homepage1> . +<http://example.org/client1> <http://xmlns.com/foaf/0.1/name> "Code v2.1" . +<http://example.org/client1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#Application> . +<http://example.org/note1> <http://purl.org/dc/elements/1.1/language> "en" . +<http://example.org/video1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/MovingImage> . +_:b5 <http://purl.org/dc/elements/1.1/language> "fr" . +_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "<p>j'adore !</p>" . +_:b5 <http://purl.org/dc/elements/1.1/format> "text/html" . +_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno1> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b1 . +_:b60 <http://www.w3.org/ns/oa#prefix> "this is an " . +_:b60 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextQuoteSelector> . +_:b60 <http://www.w3.org/ns/oa#exact> "anotation" . +_:b60 <http://www.w3.org/ns/oa#suffix> " that has some" . +_:b8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Comment text" . +_:b8 <http://purl.org/dc/elements/1.1/format> "text/plain" . +_:b8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +<http://example.org/website1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/Text> . +_:b41 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "A good description of the topic that bears further investigation" . +_:b41 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b41 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +<http://example.net/review1> <http://purl.org/dc/terms/creator> <http://example.net/user2> . +<http://example.net/review1> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by-nc/4.0/> . +<http://example.net/review1> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by/4.0/> . +<http://example.net/review1> <http://purl.org/dc/terms/created> "2014-06-02T17:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/collection1> <http://purl.org/dc/terms/creator> <http://www.w3.org/> . +<http://example.org/collection1> <http://www.w3.org/ns/activitystreams#totalItems> "41"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +<http://example.org/collection1> <http://www.w3.org/ns/activitystreams#first> <http://example.org/collection1/page1> . +<http://example.org/collection1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#OrderedCollection> . +<http://example.org/collection1> <http://www.w3.org/2000/01/rdf-schema#label> "Annotation Examples" . +<http://example.org/analysis1.mp3> <http://purl.org/dc/elements/1.1/language> "fr" . +<http://example.org/analysis1.mp3> <http://purl.org/dc/elements/1.1/format> "audio/mpeg" . +<http://example.org/collection1/page1> <http://www.w3.org/ns/activitystreams#startIndex> "0"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +<http://example.org/collection1/page1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#OrderedCollectionPage> . +<http://example.org/collection1/page1> <http://www.w3.org/ns/activitystreams#items> _:b0 . +_:b11 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "tag1" . +_:b11 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b20 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/page6> . +_:b20 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b21 . +_:b111 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b111 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/xml" . +_:b111 <http://www.w3.org/ns/oa#refinedBy> _:b112 . +_:b70 <http://www.w3.org/ns/oa#hasSource> <http://example.org/map1> . +_:b70 <http://www.w3.org/ns/oa#hasSelector> _:b71 . +_:b91 <http://www.w3.org/ns/oa#sourceDate> "2016-02-01T12:05:23Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b91 <http://www.w3.org/ns/oa#refinedBy> _:b92 . +_:b91 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +_:b28 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page4> . +_:b28 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b83 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno34> . +_:b83 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b86 . +<http://example.org/anno12> <http://www.w3.org/ns/oa#hasTarget> _:b24 . +<http://example.org/anno12> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#tagging> . +<http://example.org/anno12> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno12> <http://www.w3.org/ns/oa#hasBody> _:b23 . +<http://example.org/user2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . +_:b84 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b84 <http://www.w3.org/ns/oa#hasState> _:b85 . +<http://example.org/anno4> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/image1#xywh=100,100,300,300> . +<http://example.org/anno4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno4> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . +_:b89 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno36> . +_:b89 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b94 . +<http://example.org/anno6> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/target1> . +<http://example.org/anno6> <http://www.w3.org/ns/oa#bodyValue> "Comment text" . +<http://example.org/anno6> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/svg1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SvgSelector> . +_:b18 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Composite> . +_:b18 <http://www.w3.org/ns/activitystreams#items> _:b19 . +<http://example.gov/patent1.pdf> <http://www.w3.org/ns/oa#textDirection> <http://www.w3.org/ns/oa#ltrDirection> . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/language> "ar" . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/language> "en" . +<http://example.gov/patent1.pdf> <http://purl.org/dc/elements/1.1/format> "application/pdf" . +<http://example.gov/patent1.pdf> <http://www.w3.org/ns/oa#processingLanguage> "en" . +_:b74 <http://www.w3.org/ns/oa#hasEndSelector> _:b76 . +_:b74 <http://www.w3.org/ns/oa#hasStartSelector> _:b75 . +_:b74 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#RangeSelector> . +<http://example.org/anno36> <http://www.w3.org/ns/oa#hasTarget> _:b90 . +<http://example.org/anno36> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno36> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +_:b66 <http://www.w3.org/ns/oa#end> "4104"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b66 <http://www.w3.org/ns/oa#start> "4096"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b66 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#DataPositionSelector> . +_:b63 <http://www.w3.org/ns/oa#end> "795"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b63 <http://www.w3.org/ns/oa#start> "412"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b63 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextPositionSelector> . +_:b36 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno15> . +_:b36 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b37 . +_:b30 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Independents> . +_:b30 <http://www.w3.org/ns/activitystreams#items> _:b31 . +_:b33 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/image4> . +_:b33 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b34 . +_:b76 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "//table[1]/tr[1]/td[4]" . +_:b76 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . +_:b65 <http://www.w3.org/ns/oa#hasSource> <http://example.org/diskimg1> . +_:b65 <http://www.w3.org/ns/oa#hasSelector> _:b66 . +<http://example.org/anno32> <http://www.w3.org/ns/oa#hasTarget> _:b78 . +<http://example.org/anno32> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno32> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +_:b27 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page3> . +_:b27 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b28 . +<http://example.org/anno31> <http://www.w3.org/ns/oa#hasTarget> _:b73 . +<http://example.org/anno31> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno31> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +_:b26 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page2> . +_:b26 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b27 . +<http://example.org/note2> <http://purl.org/dc/elements/1.1/language> "fr" . +_:b24 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#List> . +_:b24 <http://www.w3.org/ns/activitystreams#items> _:b25 . +_:b54 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "#elemid > .elemclass + p" . +_:b54 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssSelector> . +_:b34 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/image9> . +_:b34 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b77 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno32> . +_:b77 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b81 . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "58bad08927902ff9307b621c54716dcc5083e339" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/name> "My Pseudonym" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/name> "A. Person" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/nick> "user1" . +<http://example.org/user1> <http://xmlns.com/foaf/0.1/nick> "pseudo" . +<http://example.org/user1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . +<http://example.org/anno33> <http://www.w3.org/ns/oa#hasTarget> _:b82 . +<http://example.org/anno33> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno33> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +<http://example.org/anno21> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/photo1> . +<http://example.org/anno21> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno21> <http://www.w3.org/ns/oa#hasBody> _:b45 . +<http://example.org/anno35> <http://www.w3.org/ns/oa#hasTarget> _:b87 . +<http://example.org/anno35> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno35> <http://www.w3.org/ns/oa#hasBody> <http://example.org/description1> . +_:b103 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno41> . +_:b103 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b97 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> ".red { color: red }" . +_:b97 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssStyle> . +<http://example.org/anno39> <http://www.w3.org/ns/oa#hasTarget> _:b100 . +<http://example.org/anno39> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno39> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +_:b49 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno23> . +_:b49 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b52 . +<http://example.org/anno41> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasTarget> _:b110 . +<http://example.org/anno41> <http://purl.org/dc/terms/issued> "2015-10-14T15:13:28Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +<http://example.org/anno41> <http://purl.org/dc/terms/created> "2015-10-13T13:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#styledBy> <http://example.org/stylesheet1> . +<http://example.org/anno41> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasBody> _:b105 . +<http://example.org/anno41> <http://www.w3.org/ns/oa#hasBody> _:b104 . +<http://example.org/anno41> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +_:b73 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b73 <http://www.w3.org/ns/oa#hasSelector> _:b74 . +_:b40 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "readme" . +_:b40 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . +_:b40 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b67 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno29> . +_:b67 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b69 . +<http://example.org/photo1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/StillImage> . +_:b50 <http://www.w3.org/ns/oa#hasSource> <http://example.org/video1> . +_:b50 <http://www.w3.org/ns/oa#hasSelector> _:b51 . +_:b50 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b78 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b78 <http://www.w3.org/ns/oa#hasSelector> _:b79 . +_:b94 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno37> . +_:b94 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b96 . +_:b105 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Choice> . +_:b105 <http://www.w3.org/ns/activitystreams#items> _:b106 . +_:b102 <http://www.w3.org/ns/oa#hasSource> <http://example.org/image1> . +_:b102 <http://www.w3.org/ns/oa#hasScope> <http://example.org/page1> . +<http://example.org/anno40> <http://www.w3.org/ns/oa#hasTarget> _:b102 . +<http://example.org/anno40> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno40> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +<http://example.org/anno19> <http://purl.org/dc/terms/rights> <https://creativecommons.org/publicdomain/zero/1.0/> . +<http://example.org/anno19> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/product1> . +<http://example.org/anno19> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno19> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +_:b114 <http://www.w3.org/ns/oa#end> "27"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b114 <http://www.w3.org/ns/oa#start> "6"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b114 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextPositionSelector> . +_:b99 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno39> . +_:b99 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b101 . +<http://example.com/video1> <http://schema.org/accessibilityFeature> "captions" . +<http://example.com/video1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/MovingImage> . +_:b82 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b82 <http://www.w3.org/ns/oa#hasState> <http://example.org/state1> . +_:b95 <http://www.w3.org/ns/oa#hasSource> <http://example.org/document1> . +_:b95 <http://www.w3.org/ns/oa#styleClass> "red" . +_:b101 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno40> . +_:b101 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b103 . +_:b93 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "page=10" . +_:b93 <http://purl.org/dc/terms/conformsTo> <http://tools.ietf.org/rfc/rfc3778> . +_:b93 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/page1> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#bookmarking> . +<http://example.org/anno18> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasBody> _:b40 . +<http://example.org/anno18> <http://www.w3.org/ns/oa#hasBody> _:b41 . +<http://example.org/anno17> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/video1> . +<http://example.org/anno17> <http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> . +<http://example.org/anno17> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno17> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment1> . +_:b58 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno26> . +_:b58 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b61 . +_:b61 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno27> . +_:b61 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b64 . +_:b85 <http://www.w3.org/ns/oa#sourceDate> "2015-07-20T13:30:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b85 <http://www.w3.org/ns/oa#cachedSource> <http://archive.example.org/copy1> . +_:b85 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +<http://example.org/anno23> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/image1> . +<http://example.org/anno23> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno23> <http://www.w3.org/ns/oa#hasBody> _:b50 . +<http://example.com/image1#xywh=100,100,300,300> <http://purl.org/dc/elements/1.1/format> "image/jpeg" . +<http://example.com/image1#xywh=100,100,300,300> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/StillImage> . +_:b81 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno33> . +_:b81 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b83 . +_:b88 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b88 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/pdf" . +_:b57 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "/html/body/p[2]/table/tr[2]/td[3]/span" . +_:b57 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . +_:b55 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno25> . +_:b55 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b58 . +_:b72 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno31> . +_:b72 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b77 . +_:b47 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b47 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/paraselector1> . +<http://example.org/anno34> <http://www.w3.org/ns/oa#hasTarget> _:b84 . +<http://example.org/anno34> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno34> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +<http://example.org/anno24> <http://www.w3.org/ns/oa#hasTarget> _:b53 . +<http://example.org/anno24> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno24> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +_:b104 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "love" . +_:b104 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . +_:b104 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b22 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno12> . +_:b22 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b29 . +_:b109 <http://www.w3.org/ns/oa#hasSource> <http://example.org/comment1> . +_:b109 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b109 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +_:b29 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno13> . +_:b29 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b35 . +_:b43 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno20> . +_:b43 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b44 . +<http://example.org/anno30> <http://www.w3.org/ns/oa#hasTarget> _:b70 . +<http://example.org/anno30> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno30> <http://www.w3.org/ns/oa#hasBody> <http://example.org/road1> . +_:b52 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno24> . +_:b52 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b55 . +<http://example.org/anno5> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/photo1> . +<http://example.org/anno5> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno5> <http://www.w3.org/ns/oa#hasBody> _:b5 . +<http://example.org/anno16> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/textbook1> . +<http://example.org/anno16> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno16> <http://schema.org/audience> <http://example.edu/roles/teacher> . +<http://example.org/anno16> <http://www.w3.org/ns/oa#hasBody> <http://example.net/classnotes1> . +_:b19 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/page1> . +_:b19 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b20 . +<http://example.org/anno22> <http://www.w3.org/ns/oa#hasTarget> _:b48 . +<http://example.org/anno22> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno22> <http://www.w3.org/ns/oa#hasBody> _:b47 . +_:b13 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Choice> . +_:b13 <http://www.w3.org/ns/activitystreams#items> _:b14 . +_:b32 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.net/image2> . +_:b32 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b33 . +_:b80 <http://www.w3.org/ns/oa#prefix> "text before the " . +_:b80 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextQuoteSelector> . +_:b80 <http://www.w3.org/ns/oa#exact> "Selected Text" . +_:b80 <http://www.w3.org/ns/oa#suffix> " and text after it" . +_:b48 <http://www.w3.org/ns/oa#hasSource> <http://example.com/dataset1> . +_:b48 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/dataselector1> . +<http://example.org/comment1> <http://purl.org/dc/terms/creator> <http://example.org/user2> . +<http://example.org/comment1> <http://purl.org/dc/elements/1.1/language> "de" . +<http://example.org/comment1> <http://purl.org/dc/elements/1.1/format> "audio/mpeg" . +<http://example.org/comment1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/dcmitype/Sound> . +_:b113 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "xpointer(/doc/body/section[2]/para[1])" . +_:b113 <http://www.w3.org/ns/oa#refinedBy> _:b114 . +_:b113 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +<http://example.org/anno38> <http://www.w3.org/ns/oa#hasTarget> _:b98 . +<http://example.org/anno38> <http://www.w3.org/ns/oa#styledBy> _:b97 . +<http://example.org/anno38> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno38> <http://www.w3.org/ns/oa#hasBody> <http://example.org/body1> . +_:b69 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno30> . +_:b69 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b72 . +_:b45 <http://www.w3.org/ns/oa#hasSource> <http://example.org/city1> . +_:b45 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#tagging> . +_:b45 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +<http://example.org/anno29> <http://www.w3.org/ns/oa#hasTarget> _:b68 . +<http://example.org/anno29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno29> <http://www.w3.org/ns/oa#hasBody> <http://example.org/road1> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#via> <http://other.example.org/anno1> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/product1> . +<http://example.org/anno20> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno20> <http://www.w3.org/ns/oa#canonical> <urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df> . +_:b44 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno21> . +_:b44 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b46 . +_:b92 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#HttpRequestState> . +_:b92 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "Accept: application/pdf" . +_:b92 <http://www.w3.org/ns/oa#refinedBy> _:b93 . +<http://example.org/anno37> <http://www.w3.org/ns/oa#hasTarget> _:b95 . +<http://example.org/anno37> <http://www.w3.org/ns/oa#styledBy> <http://example.org/style1> . +<http://example.org/anno37> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno37> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/stylesheet1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#CssStyle> . +_:b112 <http://www.w3.org/ns/oa#sourceDate> "2015-09-25T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +_:b112 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TimeState> . +_:b100 <http://www.w3.org/ns/oa#hasSource> <http://example.edu/article.pdf> . +_:b100 <http://www.w3.org/ns/oa#renderedVia> <http://example.com/pdf-to-html-library> . +_:b100 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/selectors/html-selector1> . +_:b71 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "<svg:svg> ... </svg:svg>" . +_:b71 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SvgSelector> . +_:b108 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b109 . +_:b108 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b68 <http://www.w3.org/ns/oa#hasSource> <http://example.org/map1> . +_:b68 <http://www.w3.org/ns/oa#hasSelector> <http://example.org/svg1> . +<http://example.com/pdf-to-html-library> <http://schema.org/softwareVersion> "2.5" . +<http://example.com/pdf-to-html-library> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#Application> . +<http://example.edu/roles/teacher> <http://schema.org/educationalRole> "teacher" . +<http://example.edu/roles/teacher> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/EducationalAudience> . +<http://example.org/anno14> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.org/anno14> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/restaurant1> . +<http://example.org/anno14> <http://purl.org/dc/terms/issued> "2015-02-04T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://purl.org/dc/terms/created> "2015-01-28T12:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno14> <http://purl.org/dc/terms/modified> "2015-01-29T09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . +<http://example.org/anno14> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno14> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +_:b107 <http://purl.org/dc/terms/creator> <http://example.org/user1> . +_:b107 <http://purl.org/dc/elements/1.1/language> "en" . +_:b107 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "I really love this particular bit of text in this XML. No really." . +_:b107 <http://www.w3.org/ns/oa#hasPurpose> <http://www.w3.org/ns/oa#describing> . +_:b107 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#TextualBody> . +_:b107 <http://purl.org/dc/elements/1.1/format> "text/plain" . +_:b98 <http://www.w3.org/ns/oa#hasSource> <http://example.org/target1> . +_:b98 <http://www.w3.org/ns/oa#styleClass> "red" . +_:b42 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno19> . +_:b42 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b43 . +_:b90 <http://www.w3.org/ns/oa#hasSource> <http://example.org/ebook1> . +_:b90 <http://www.w3.org/ns/oa#hasState> _:b91 . +_:b87 <http://www.w3.org/ns/oa#hasSource> <http://example.org/resource1> . +_:b87 <http://www.w3.org/ns/oa#hasState> _:b88 . +_:b79 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "para5" . +_:b79 <http://www.w3.org/ns/oa#refinedBy> _:b80 . +_:b79 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +_:b110 <http://www.w3.org/ns/oa#hasSource> <http://example.com/document1> . +_:b110 <http://www.w3.org/ns/oa#hasSelector> _:b113 . +_:b110 <http://www.w3.org/ns/oa#hasState> _:b111 . +_:b110 <http://www.w3.org/ns/oa#styleClass> "mystyle" . +_:b110 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#SpecificResource> . +_:b96 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno38> . +_:b96 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b99 . +_:b14 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/note1> . +_:b14 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b15 . +_:b9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno8> . +_:b9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b10 . +_:b25 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.com/book/page1> . +_:b25 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b26 . +_:b38 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno17> . +_:b38 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b39 . +<http://example.org/anno25> <http://www.w3.org/ns/oa#hasTarget> _:b56 . +<http://example.org/anno25> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno25> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +<http://example.org/anno26> <http://www.w3.org/ns/oa#hasTarget> _:b59 . +<http://example.org/anno26> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno26> <http://www.w3.org/ns/oa#hasBody> <http://example.org/comment1> . +<http://example.org/anno8> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/ebook1> . +<http://example.org/anno8> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b16 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno11> . +_:b16 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b22 . +_:b7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno7> . +_:b7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b9 . +_:b53 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b53 <http://www.w3.org/ns/oa#hasSelector> _:b54 . +_:b106 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b107 . +_:b106 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b108 . +_:b51 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "t=30,60" . +_:b51 <http://purl.org/dc/terms/conformsTo> <http://www.w3.org/TR/media-frags/> . +_:b51 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#FragmentSelector> . +<http://example.org/anno15> <http://purl.org/dc/terms/creator> <http://example.org/user1> . +<http://example.org/anno15> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/restaurant1> . +<http://example.org/anno15> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno15> <http://www.w3.org/ns/oa#hasBody> <http://example.net/review1> . +<http://example.org/anno15> <http://www.w3.org/ns/activitystreams#generator> <http://example.org/client1> . +<http://example.org/anno28> <http://www.w3.org/ns/oa#hasTarget> _:b65 . +<http://example.org/anno28> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno28> <http://www.w3.org/ns/oa#hasBody> <http://example.org/note1> . +_:b39 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno18> . +_:b39 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b42 . +<http://example.org/anno10> <http://www.w3.org/ns/oa#hasTarget> <http://example.org/website1> . +<http://example.org/anno10> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno10> <http://www.w3.org/ns/oa#hasBody> _:b13 . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasTarget> <http://example.gov/patent1.pdf> . +<http://example.org/anno2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasBody> <http://example.org/analysis1.mp3> . +_:b10 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno9> . +_:b10 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b12 . +_:b62 <http://www.w3.org/ns/oa#hasSource> <http://example.org/ebook1> . +_:b62 <http://www.w3.org/ns/oa#hasSelector> _:b63 . +_:b12 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno10> . +_:b12 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b16 . +_:b64 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno28> . +_:b64 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b67 . +_:b46 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno22> . +_:b46 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b49 . +_:b59 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1> . +_:b59 <http://www.w3.org/ns/oa#hasSelector> _:b60 . +_:b75 <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "//table[1]/tr[1]/td[2]" . +_:b75 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#XPathSelector> . +<http://example.org/anno27> <http://www.w3.org/ns/oa#hasTarget> _:b62 . +<http://example.org/anno27> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno27> <http://www.w3.org/ns/oa#hasBody> <http://example.org/review1> . +_:b86 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno35> . +_:b86 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b89 . +_:b21 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.net/page4> . +_:b21 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b56 <http://www.w3.org/ns/oa#hasSource> <http://example.org/page1.html> . +_:b56 <http://www.w3.org/ns/oa#hasSelector> _:b57 . 
diff --git a/annotation-vocab/tools/samples/correct/example41.json b/annotation-vocab/tools/samples/correct/example41.json new file mode 100644 index 0000000..0f5a475 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example41.json 
@@ -0,0 +1,10 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/collection1", + "type": "AnnotationCollection", + "label": "Steampunk Annotations", + "creator": "http://example.com/publisher", + "total": 42023, + "first": "http://example.org/page1", + "last": "http://example.org/page42" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/example41.nt b/annotation-vocab/tools/samples/correct/example41.nt new file mode 100644 index 0000000..7d44e9b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example41.nt 
@@ -0,0 +1,6 @@ +<http://example.org/collection1> <http://www.w3.org/ns/activitystreams#last> <http://example.org/page42> . +<http://example.org/collection1> <http://www.w3.org/ns/activitystreams#first> <http://example.org/page1> . +<http://example.org/collection1> <http://www.w3.org/ns/activitystreams#totalItems> "42023"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +<http://example.org/collection1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#OrderedCollection> . +<http://example.org/collection1> <http://www.w3.org/2000/01/rdf-schema#label> "Steampunk Annotations" . +<http://example.org/collection1> <http://purl.org/dc/terms/creator> <http://example.com/publisher> . 
diff --git a/annotation-vocab/tools/samples/correct/example42.json b/annotation-vocab/tools/samples/correct/example42.json new file mode 100644 index 0000000..15306a5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example42.json 
@@ -0,0 +1,22 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/page1", + "type": "AnnotationPage", + "partOf": "http://example.org/collection1", + "next": "http://example.org/page2", + "startIndex": 0, + "items": [ + { + "id": "http://example.org/anno1", + "type": "Annotation", + "body": "http://example.net/comment1", + "target": "http://example.com/book/chapter1" + }, + { + "id": "http://example.org/anno2", + "type": "Annotation", + "body": "http://example.net/comment2", + "target": "http://example.com/book/chapter2" + } + ] +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/example42.nt b/annotation-vocab/tools/samples/correct/example42.nt new file mode 100644 index 0000000..9d8934d --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example42.nt 
@@ -0,0 +1,15 @@ +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment1> . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/book/chapter1> . +<http://example.org/anno1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#partOf> <http://example.org/collection1> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#items> _:b0 . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#next> <http://example.org/page2> . +<http://example.org/page1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#OrderedCollectionPage> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#startIndex> "0"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno2> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment2> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/book/chapter2> . +<http://example.org/anno2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b1 . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno1> . 
diff --git a/annotation-vocab/tools/samples/correct/example43.json b/annotation-vocab/tools/samples/correct/example43.json new file mode 100644 index 0000000..15306a5 --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example43.json 
@@ -0,0 +1,22 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/page1", + "type": "AnnotationPage", + "partOf": "http://example.org/collection1", + "next": "http://example.org/page2", + "startIndex": 0, + "items": [ + { + "id": "http://example.org/anno1", + "type": "Annotation", + "body": "http://example.net/comment1", + "target": "http://example.com/book/chapter1" + }, + { + "id": "http://example.org/anno2", + "type": "Annotation", + "body": "http://example.net/comment2", + "target": "http://example.com/book/chapter2" + } + ] +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/correct/example43.nt b/annotation-vocab/tools/samples/correct/example43.nt new file mode 100644 index 0000000..16b8b3b --- /dev/null +++ b/annotation-vocab/tools/samples/correct/example43.nt 
@@ -0,0 +1,15 @@ +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> . +_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno2> . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b1 . +_:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://example.org/anno1> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#partOf> <http://example.org/collection1> . +<http://example.org/page1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/activitystreams#OrderedCollectionPage> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#next> <http://example.org/page2> . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#items> _:b0 . +<http://example.org/page1> <http://www.w3.org/ns/activitystreams#startIndex> "0"^^<http://www.w3.org/2001/XMLSchema#nonNegativeInteger> . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment1> . +<http://example.org/anno1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno1> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/book/chapter1> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasBody> <http://example.net/comment2> . +<http://example.org/anno2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/oa#Annotation> . +<http://example.org/anno2> <http://www.w3.org/ns/oa#hasTarget> <http://example.com/book/chapter2> . 
diff --git a/annotation-vocab/tools/samples/incorrect/anno1.json b/annotation-vocab/tools/samples/incorrect/anno1.json new file mode 100644 index 0000000..8c81552 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno1.json 
@@ -0,0 +1 @@ +this is not json \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno10.json b/annotation-vocab/tools/samples/incorrect/anno10.json new file mode 100644 index 0000000..2392786 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno10.json 
@@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "no target", + "body": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno11.json b/annotation-vocab/tools/samples/incorrect/anno11.json new file mode 100644 index 0000000..183a6bf --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno11.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad target", + "body": "http://example.org/post1", + "target": 9 +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno12.json b/annotation-vocab/tools/samples/incorrect/anno12.json new file mode 100644 index 0000000..4d6e667 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno12.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad body", + "body": "this is not a uri", + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno13.json b/annotation-vocab/tools/samples/incorrect/anno13.json new file mode 100644 index 0000000..714b58f --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno13.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad body id", + "body": { + "id": "this is not a uri either", + "format": "text/plain", + "langauage": "en" }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno14.json b/annotation-vocab/tools/samples/incorrect/anno14.json new file mode 100644 index 0000000..984cf1c --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno14.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad format", + "body": { + "id": "http://example.com/1", + "format": 6, + "langauage": "en" }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno15.json b/annotation-vocab/tools/samples/incorrect/anno15.json new file mode 100644 index 0000000..1ec07d3 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno15.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad language", + "body": { + "id": "http://example.com/1", + "format": "text/plain", + "langauage": 3 }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno16.json b/annotation-vocab/tools/samples/incorrect/anno16.json new file mode 100644 index 0000000..83abbc3 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno16.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad text direction", + "body": { + "id": "http://example.com/1", + "format": "text/plain", + "textDirection": "squirrel" }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno17.json b/annotation-vocab/tools/samples/incorrect/anno17.json new file mode 100644 index 0000000..40e5bfb --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno17.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "no value for textual body", + "body": { + "type": "TextualBody", + "format": "text/plain" + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno18.json b/annotation-vocab/tools/samples/incorrect/anno18.json new file mode 100644 index 0000000..d8ac1ed --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno18.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad value for textual body", + "body": { + "type": "TextualBody", + "format": "text/plain", + "value": ["this should", "not have", "multiple values"] + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno19.json b/annotation-vocab/tools/samples/incorrect/anno19.json new file mode 100644 index 0000000..14dc133 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno19.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "body and bodyValue", + "body": { + "type": "TextualBody", + "format": "text/plain", + "value": "body" + }, + "bodyValue": "doppelganger", + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno2.json b/annotation-vocab/tools/samples/incorrect/anno2.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno2.json 
@@ -0,0 +1,2 @@ +{ +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno20.json b/annotation-vocab/tools/samples/incorrect/anno20.json new file mode 100644 index 0000000..66b2f1a --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno20.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad bodyValue", + "bodyValue": ["body", "doppelganger"], + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno21.json b/annotation-vocab/tools/samples/incorrect/anno21.json new file mode 100644 index 0000000..37faba1 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno21.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad bodyValue", + "bodyValue": 23, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno22.json b/annotation-vocab/tools/samples/incorrect/anno22.json new file mode 100644 index 0000000..ef1eaf9 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno22.json 
@@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "Too many composite types (choice? list?)", + "body": { + "type": ["Choice", "List"], + "items": ["http://example.com/1", "http://example.com/2"] + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno23.json b/annotation-vocab/tools/samples/incorrect/anno23.json new file mode 100644 index 0000000..8d5610b --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno23.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "too many processing languages", + "body": { + "id": "http://example.com/1", + "format": "text/plain", + "processingLanguage": ["en", "de"] + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno24.json b/annotation-vocab/tools/samples/incorrect/anno24.json new file mode 100644 index 0000000..66d088c --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno24.json 
@@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad text direction", + "body": { + "id": "http://example.com/1", + "format": "text/plain", + "textDirection": ["ltr","rtl"] + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno25.json b/annotation-vocab/tools/samples/incorrect/anno25.json new file mode 100644 index 0000000..67346fc --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno25.json 
@@ -0,0 +1,10 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "Uninterpretable body (choice? list?)", + "body": { + "items": ["http://example.com/1", "http://example.com/2"] + }, + "target": "http://example.org/post1", +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno26.json b/annotation-vocab/tools/samples/incorrect/anno26.json new file mode 100644 index 0000000..2c0c161 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno26.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad creator", + "creator": 6, + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno27.json b/annotation-vocab/tools/samples/incorrect/anno27.json new file mode 100644 index 0000000..0cd8cc2 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno27.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad generator", + "generator": 42, + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno28.json b/annotation-vocab/tools/samples/incorrect/anno28.json new file mode 100644 index 0000000..041fefd --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno28.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "created": "yesterday", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno29.json b/annotation-vocab/tools/samples/incorrect/anno29.json new file mode 100644 index 0000000..ce48fc7 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno29.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "modified": "an hour ago", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno3.json b/annotation-vocab/tools/samples/incorrect/anno3.json new file mode 100644 index 0000000..7afbb4f --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno3.json 
@@ -0,0 +1,6 @@ +{ + "id": "http://example.org/anno1", + "type": "Annotation", + "label": "No context", + "target": "http://example.org/target" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno30.json b/annotation-vocab/tools/samples/incorrect/anno30.json new file mode 100644 index 0000000..fcadc17 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno30.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "generated": "now", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno31.json b/annotation-vocab/tools/samples/incorrect/anno31.json new file mode 100644 index 0000000..c857a12 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno31.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "modified": ["2015-01-28T12:00:00Z","2015-01-28T12:00:01Z"], + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno32.json b/annotation-vocab/tools/samples/incorrect/anno32.json new file mode 100644 index 0000000..cccc1ac --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno32.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "created": ["2015-01-28T12:00:00Z","2015-01-28T12:00:01Z"], + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno33.json b/annotation-vocab/tools/samples/incorrect/anno33.json new file mode 100644 index 0000000..267dfa4 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno33.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad created", + "generated": ["2015-01-28T12:00:00Z","2015-01-28T12:00:01Z"], + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno34.json b/annotation-vocab/tools/samples/incorrect/anno34.json new file mode 100644 index 0000000..c81b0fe --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno34.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad rights", + "rights": "not a uri", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno35.json b/annotation-vocab/tools/samples/incorrect/anno35.json new file mode 100644 index 0000000..f2f590e --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno35.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad via", + "via": "not a uri", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno36.json b/annotation-vocab/tools/samples/incorrect/anno36.json new file mode 100644 index 0000000..d9bb4af --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno36.json 
@@ -0,0 +1,9 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "bad canonical", + "canonical": "not a uri", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno37.json b/annotation-vocab/tools/samples/incorrect/anno37.json new file mode 100644 index 0000000..072c540 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno37.json 
@@ -0,0 +1,10 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "no source for specific resource", + "body": "http://example.org/post1", + "target": { + "type": "SpecificResource", + } +} 
diff --git a/annotation-vocab/tools/samples/incorrect/anno38.json b/annotation-vocab/tools/samples/incorrect/anno38.json new file mode 100644 index 0000000..9da7c0b --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno38.json 
@@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "no value for Fragment Selector", + "body": "http://example.org/post1", + "target": { + "type": "SpecificResource", + "selector": { + "type": "FragmentSelector" + } + } +} 
diff --git a/annotation-vocab/tools/samples/incorrect/anno39.json b/annotation-vocab/tools/samples/incorrect/anno39.json new file mode 100644 index 0000000..50510f8 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno39.json 
@@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "multiple values for Fragment Selector", + "body": "http://example.org/post1", + "target": { + "type": "SpecificResource", + "selector": { + "type": "FragmentSelector", + "value": ["xxx", "yyy"] + } + } +} 
diff --git a/annotation-vocab/tools/samples/incorrect/anno4.json b/annotation-vocab/tools/samples/incorrect/anno4.json new file mode 100644 index 0000000..a0aa6b9 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno4.json 
@@ -0,0 +1,7 @@ +{ + "@context": "fish", + "id": "http://example.org/anno1", + "type": "Annotation", + "label": "Bad context", + "target": "http://example.org/target" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno5.json b/annotation-vocab/tools/samples/incorrect/anno5.json new file mode 100644 index 0000000..12afee6 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno5.json 
@@ -0,0 +1,9 @@ +{ + "@context": ["http://example.org/not/my/context.json", + "http://example.org/nor/this/one.json" + ], + "id": "http://example.org/anno1", + "type": "Annotation", + "label": "Bad context", + "target": "http://example.org/target" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno6.json b/annotation-vocab/tools/samples/incorrect/anno6.json new file mode 100644 index 0000000..eeb1b2e --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno6.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "not a uri", + "label": "bad id", + "type": "Annotation", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno7.json b/annotation-vocab/tools/samples/incorrect/anno7.json new file mode 100644 index 0000000..68cbff0 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno7.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Annotation", + "label": "multiple identifiers", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno8.json b/annotation-vocab/tools/samples/incorrect/anno8.json new file mode 100644 index 0000000..0f28424 --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno8.json 
@@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "label": "no type", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/samples/incorrect/anno9.json b/annotation-vocab/tools/samples/incorrect/anno9.json new file mode 100644 index 0000000..db0f8ca --- /dev/null +++ b/annotation-vocab/tools/samples/incorrect/anno9.json 
@@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": ["http://example.org/1", "http://example.org/2"], + "type": "Squirrel", + "label": "bad type", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file 
diff --git a/annotation-vocab/tools/vocab_tester.py b/annotation-vocab/tools/vocab_tester.py new file mode 100644 index 0000000..873377c --- /dev/null +++ b/annotation-vocab/tools/vocab_tester.py 
@@ -0,0 +1,240 @@ + +# Author: Rob Sanderson (azaroth42@gmail.com) +# License: Apache2 +# Last Modified: 2016-09-02 + +import json +from rdflib import ConjunctiveGraph, URIRef +from pyld import jsonld +from pyld.jsonld import compact, expand, frame, from_rdf, to_rdf, JsonLdProcessor +import urllib + +# Stop code from looking up the contexts online for every operation +docCache = {} + +def fetch(url): + fh = urllib.urlopen(url) + data = fh.read() + fh.close() + return data + +def load_document_and_cache(url): + if docCache.has_key(url): + return docCache[url] + + doc = { + 'contextUrl': None, + 'documentUrl': None, + 'document': '' + } + data = fetch(url) + doc['document'] = data; + docCache[url] = doc + return doc + +jsonld.set_document_loader(load_document_and_cache) + +class Validator(object): + + def __init__(self): + + self.rdflib_class_map = { + "Annotation": "oa:Annotation", + "Dataset": "dctypes:Dataset", + "Image": "dctypes:StillImage", + "Video": "dctypes:MovingImage", + "Audio": "dctypes:Sound", + "Text": "dctypes:Text", + "TextualBody": "oa:TextualBody", + "ResourceSelection": "oa:ResourceSelection", + "SpecificResource": "oa:SpecificResource", + "FragmentSelector": "oa:FragmentSelector", + "CssSelector": "oa:CssSelector", + "XPathSelector": "oa:XPathSelector", + "TextQuoteSelector": "oa:TextQuoteSelector", + "TextPositionSelector": "oa:TextPositionSelector", + "DataPositionSelector": "oa:DataPositionSelector", + "SvgSelector": "oa:SvgSelector", + "RangeSelector": "oa:RangeSelector", + "TimeState": "oa:TimeState", + "HttpState": "oa:HttpRequestState", + "CssStylesheet": "oa:CssStyle", + "Choice": "oa:Choice", + "Composite": "oa:Composite", + "List": "oa:List", + "Independents": "oa:Independents", + "Person": "foaf:Person", + "Software": "as:Application", + "Organization": "foaf:Organization", + "AnnotationCollection": "as:OrderedCollection", + "AnnotationPage": "as:OrderedCollectionPage", + "Audience": "schema:Audience" + } + + + def _clean_bnode_ids(self, js): + new = {} + for (k,v) in js.items(): + if k == 'id' and v.startswith("_:"): + continue + elif type(v) == dict: + # recurse + res = self._clean_bnode_ids(v) + new[k] = res + else: + new[k] = v + return new + + def _mk_rdflib_jsonld(self, js): + # rdflib's json-ld implementation sucks + # Pre-process to make it work + # recurse the structure looking for types, and replacing them. + new = {} + for (k,v) in js.items(): + if k == 'type': + if type(v) == list: + nl = [] + for i in v: + if self.rdflib_class_map.has_key(i): + nl.append(self.rdflib_class_map[i]) + new['type'] = nl + else: + if self.rdflib_class_map.has_key(v): + new['type'] = self.rdflib_class_map[v] + elif type(v) == dict: + # recurse + res = self._mk_rdflib_jsonld(v) + new[k] = res + else: + new[k] = v + return new + + def json_to_rdf(self, js, fmt=None): + d2 = self._mk_rdflib_jsonld(js) + js = json.dumps(d2) + g = ConjunctiveGraph() + g.parse(data=js, format='json-ld') + if fmt: + out = g.serialize(format=fmt) + return out + else: + return g + + def rdf_to_jsonld(self, rdf, fmt): + + g = ConjunctiveGraph() + g.parse(data=rdf, format=fmt) + out = g.serialize(format='json-ld') + + j2 = json.loads(out) + j2 = {"@context": context_js, "@graph": j2} + framed = frame(j2, frame_js) + out = compact(framed, context_js) + # recursively clean blank node ids + #out = self._clean_bnode_ids(out) + return out + + def compact_and_clean(self, js): + newjs = compact(js, context_js) + newjs['@context'] = context + if newjs.has_key("@graph"): + for k,v in newjs['@graph'].items(): + newjs[k] = v + del newjs['@graph'] + return newjs + +validator = Validator() + +example = "https://raw.githubusercontent.com/w3c/web-annotation/gh-pages/model/wd2/examples/correct/anno4.json" +example_ttl = "https://raw.githubusercontent.com/w3c/web-annotation/gh-pages/vocab/wd/examples/correct/anno1.ttl" +context = "http://www.w3.org/ns/anno.jsonld" +frameURI = "https://raw.githubusercontent.com/w3c/web-annotation/gh-pages/jsonld/annotation_frame.jsonld" +# ontology = "https://www.w3.org/ns/oa.ttl" +ontology = "https://raw.githubusercontent.com/w3c/web-annotation/gh-pages/vocab/wd/ontology/oa.ttl" + +data = fetch(context) +context_js = json.loads(data) +data = fetch(example) +example_js = json.loads(data) +data = fetch(frameURI) +frame_js = json.loads(data) + +# Test1: JSON-LD context document can be parsed without errors by JSON-LD validators +# Context document is parsable if it can be loaded and used to expand the example +try: + expanded = expand(example_js, context_js) +except: + print "Context is invalid, failed Test 1" + + +# Test2: JSON-LD context document can be used to convert JSON-LD serialized Annotations into RDF triples. +try: + jsonld_nq = to_rdf(example_js, {"base": "http://example.org/", "format": "application/nquads"}) +except: + print "Cannot use context to convert JSON-LD to NQuads" + + +# Test3: Graphs produced are isomorphic +try: + rl_g = validator.json_to_rdf(example_js) + g = ConjunctiveGraph() + js_g = g.parse(data=jsonld_nq, format="nt") + rl_g_nq = rl_g.serialize(format="nquads") + assert(len(rl_g.store) == len(js_g.store)) + assert(rl_g.isomorphic(js_g)) +except: + print "Different triples from two parsers, or non-isomorphic graphs" + + +# Test4: The graphs produced can be converted back into JSON-LD without loss of information +try: + js = validator.rdf_to_jsonld(jsonld_nq, "nt") + js2 = validator.compact_and_clean(js) + assert(js2 == example_js) +except: + print "Failed to recompact parsed data" + raise + + +# Test5: ontology documents can be parsed without errors by validators +try: + g = ConjunctiveGraph().parse(ontology, format="turtle") +except: + raise + + +# Test6: ontology is internally consistent with respect to domains, ranges, etc + +# step 1: find all the classes. +rdftype = URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#type") +rdfsdomain = URIRef("http://www.w3.org/2000/01/rdf-schema#domain") +rdfsrange = URIRef("http://www.w3.org/2000/01/rdf-schema#range") +rdfsresource = URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource") +rdfssco = URIRef("http://www.w3.org/2000/01/rdf-schema#subClassOf") +asColl = URIRef("http://www.w3.org/ns/activitystreams#OrderedCollection") +skosConcept = URIRef("http://www.w3.org/2004/02/skos/core#Concept") + +otherClasses = [asColl, skosConcept] +classes = list(g.subjects(rdftype, URIRef("http://www.w3.org/2000/01/rdf-schema#Class"))) +props = list(g.subjects(rdftype, URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"))) + +for p in props: + domains = list(g.objects(p, rdfsdomain)) + for d in domains: + assert(d in classes) + +for p in props: + ranges = list(g.objects(p, rdfsrange)) + for r in ranges: + if not r in classes and not str(r).startswith("http://www.w3.org/2001/XMLSchema#") and \ + not r == rdfsresource: + print "Found inconsistent property: %s has unknown range" % p + +for c in classes: + parents = list(g.objects(c, rdfssco)) + for p in parents: + if not p in classes and not p in otherClasses: + print "Found inconsistent class: %s has unknown superClass" % c + + +print "Done."